[{"data":1,"prerenderedAt":5260},["ShallowReactive",2],{"blog-when-not-to-build-an-mvp":3,"related-topic-when-not-to-build-an-mvp":581,"related-recent-when-not-to-build-an-mvp":2261,"content-query-jQRbMGye4T":4848},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"topic":10,"author":11,"authorProfile":12,"coverImg":13,"coverImgAlt":14,"published":15,"toc":15,"readingTime":16,"createdAt":17,"updatedAt":17,"keywords":18,"body":27,"_type":575,"_id":576,"_source":577,"_file":578,"_stem":579,"_extension":580},"/blog/when-not-to-build-an-mvp","blog",false,"","When NOT to Build an MVP: Signs You're Not Ready","We build MVPs for a living — and sometimes we tell founders to wait. Here are the honest signs you're not ready, and cheaper ways to test your idea first.","MVP Development","Tarun Bhukya","https://www.linkedin.com/in/tarun-kumar-bhukya-40168b85/","/images/blog/when-not-to-build-an-mvp.webp","When not to build an MVP — signs you're not ready, from the team that builds them",true,"12 min read","2026-05-04",[19,20,21,22,23,24,25,26],"when not to build an MVP","signs you're not ready to build an MVP","should I build an MVP","do I need an MVP","MVP mistakes to avoid","validate startup idea before building","alternatives to building an MVP","when is an MVP a bad idea",{"type":28,"children":29,"toc":563},"root",[30,38,49,54,74,79,86,91,101,106,111,117,122,134,139,144,150,155,167,172,177,183,188,207,221,227,237,242,287,307,312,318,323,328,333,339,344,349,402,429,449,462,468,473,493,498,503,509,514,533,537],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","We build MVPs for a living. So you'd expect us to tell you to build one. Most of the time, we will.",{"type":31,"tag":32,"props":39,"children":40},{},[41,43],{"type":36,"value":42},"But not always. Sometimes the most honest thing we can say to a founder is: ",{"type":31,"tag":44,"props":45,"children":46},"em",{},[47],{"type":36,"value":48},"not yet.",{"type":31,"tag":32,"props":50,"children":51},{},[52],{"type":36,"value":53},"That's an odd thing for an MVP team to put in writing, and we know it. It would be easier — and more profitable in the short term — to take every project that walks in the door. We don't, because we've seen what happens when a founder spends their seed money building the wrong thing. The product ships, nobody shows up, and the runway's gone. We'd rather lose a project than be part of that story.",{"type":31,"tag":32,"props":55,"children":56},{},[57,59,65,67,72],{"type":36,"value":58},"Here's the number that sits behind all of this: roughly ",{"type":31,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":36,"value":64},"42% of startups fail because there was no real market need for what they built.",{"type":36,"value":66}," An MVP doesn't fix that. Building faster doesn't fix that. Only one thing does — finding out whether people actually want the thing ",{"type":31,"tag":44,"props":68,"children":69},{},[70],{"type":36,"value":71},"before",{"type":36,"value":73}," you pour months and a chunk of your runway into it.",{"type":31,"tag":32,"props":75,"children":76},{},[77],{"type":36,"value":78},"So before you build, run through these six signs. If any of them sound like you, you might not be ready — and we'll show you cheaper ways to get there. None of this is anti-building. It's pro-building-the-right-thing.",{"type":31,"tag":80,"props":81,"children":83},"h2",{"id":82},"sign-1-you-cant-say-what-youre-testing-in-one-sentence",[84],{"type":36,"value":85},"Sign 1 — You Can't Say What You're Testing in One Sentence",{"type":31,"tag":32,"props":87,"children":88},{},[89],{"type":36,"value":90},"An MVP is an experiment, not a product. And an experiment without a hypothesis is just spending.",{"type":31,"tag":32,"props":92,"children":93},{},[94,96],{"type":36,"value":95},"Try to finish this sentence: ",{"type":31,"tag":44,"props":97,"children":98},{},[99],{"type":36,"value":100},"\"I'm building this to find out whether ___, and I'll know I'm right if ___.\"",{"type":31,"tag":32,"props":102,"children":103},{},[104],{"type":36,"value":105},"If you can't fill in both blanks cleanly, you're not ready to build — you're ready to think. \"I want to see what happens\" isn't a hypothesis. \"I want to find out if freelancers will pay $20 a month to automate invoice reminders, and I'll know if 30 of them subscribe in the first month\" is.",{"type":31,"tag":32,"props":107,"children":108},{},[109],{"type":36,"value":110},"The one-sentence test is unforgiving on purpose. If the thing you're testing won't fit in a sentence, it won't fit in a focused MVP either — and you'll end up building five experiments at once and learning from none of them.",{"type":31,"tag":80,"props":112,"children":114},{"id":113},"sign-2-you-havent-talked-to-enough-real-users",[115],{"type":36,"value":116},"Sign 2 — You Haven't Talked to Enough Real Users",{"type":31,"tag":32,"props":118,"children":119},{},[120],{"type":36,"value":121},"This is the most common reason founders aren't ready, and the hardest to admit — because skipping it feels like progress.",{"type":31,"tag":32,"props":123,"children":124},{},[125,127,132],{"type":36,"value":126},"Here's the test: have you sat down with at least 20 people in your target audience and ",{"type":31,"tag":44,"props":128,"children":129},{},[130],{"type":36,"value":131},"listened",{"type":36,"value":133}," — without pitching them? Not \"showed them your deck and watched them nod politely.\" Listened. Asked about the problem. Found out how they solve it today, what they've tried, what they'd pay to make it go away.",{"type":31,"tag":32,"props":135,"children":136},{},[137],{"type":36,"value":138},"If you haven't, building is the most expensive form of procrastination there is. It feels productive. You're shipping code, you're making progress, you're avoiding the genuinely uncomfortable work of finding out whether strangers care about your idea. But code can't tell you something twenty honest conversations would have told you for free.",{"type":31,"tag":32,"props":140,"children":141},{},[142],{"type":36,"value":143},"Talk to the users first. They'll either confirm you're onto something or save you a build.",{"type":31,"tag":80,"props":145,"children":147},{"id":146},"sign-3-you-havent-defined-what-success-looks-like",[148],{"type":36,"value":149},"Sign 3 — You Haven't Defined What Success Looks Like",{"type":31,"tag":32,"props":151,"children":152},{},[153],{"type":36,"value":154},"\"Let's launch and see what happens\" is how founders spend $40,000 and learn nothing.",{"type":31,"tag":32,"props":156,"children":157},{},[158,160,165],{"type":36,"value":159},"Before you build, tie your MVP to one or two measurable learning goals. Not revenue goals — ",{"type":31,"tag":44,"props":161,"children":162},{},[163],{"type":36,"value":164},"learning",{"type":36,"value":166}," goals. What number, after launch, would tell you the hypothesis is working? What number would tell you it's time to change course?",{"type":31,"tag":32,"props":168,"children":169},{},[170],{"type":36,"value":171},"For the invoice-reminder example: \"100 freelancers sign up in month one, and 30% of them connect a real account.\" Those numbers mean something. You can look at them in six weeks and make a real decision. \"See what happens\" gives you a launch and a shrug.",{"type":31,"tag":32,"props":173,"children":174},{},[175],{"type":36,"value":176},"If you don't know what success looks like, you won't recognize it when it arrives — or notice when it doesn't. Define it before you build, while you're still honest with yourself.",{"type":31,"tag":80,"props":178,"children":180},{"id":179},"sign-4-youre-trying-to-build-everything",[181],{"type":36,"value":182},"Sign 4 — You're Trying to Build Everything",{"type":31,"tag":32,"props":184,"children":185},{},[186],{"type":36,"value":187},"If your \"minimum viable product\" has fifteen features, it's neither minimum nor an experiment. It's a v1 you can't afford yet.",{"type":31,"tag":32,"props":189,"children":190},{},[191,193,198,200,205],{"type":36,"value":192},"Feature creep before launch is a tell that you haven't decided what you're actually testing. Every feature is a hedge — \"but what if they want ",{"type":31,"tag":44,"props":194,"children":195},{},[196],{"type":36,"value":197},"this",{"type":36,"value":199}," too?\" — and a pile of hedges is just an expensive way of admitting you're not sure. An MVP tests one risky assumption. One. Everything else can wait for the version you build ",{"type":31,"tag":44,"props":201,"children":202},{},[203],{"type":36,"value":204},"after",{"type":36,"value":206}," you've proven the assumption holds.",{"type":31,"tag":32,"props":208,"children":209},{},[210,212,219],{"type":36,"value":211},"The good news: if you genuinely are ready and the problem is just that your scope is too big, that's fixable. Here's ",{"type":31,"tag":213,"props":214,"children":216},"a",{"href":215},"/blog/scope-software-project/",[217],{"type":36,"value":218},"how to scope a software project down to its essential first build",{"type":36,"value":220}," before you spend a dollar. Cutting the scope is often the difference between \"not ready\" and \"ready.\"",{"type":31,"tag":80,"props":222,"children":224},{"id":223},"sign-5-a-cheaper-test-would-answer-your-question",[225],{"type":36,"value":226},"Sign 5 — A Cheaper Test Would Answer Your Question",{"type":31,"tag":32,"props":228,"children":229},{},[230,232],{"type":36,"value":231},"This is the big one, and the most useful. Before you commit to a build, ask: ",{"type":31,"tag":44,"props":233,"children":234},{},[235],{"type":36,"value":236},"is there a cheaper experiment that would answer the same question?",{"type":31,"tag":32,"props":238,"children":239},{},[240],{"type":36,"value":241},"Very often there is. Building software is one of the most expensive ways to test an idea, and it's rarely the first thing you should reach for. Here are four alternatives, roughly in order of cost, with honest math:",{"type":31,"tag":243,"props":244,"children":245},"ul",{},[246,257,267,277],{"type":31,"tag":247,"props":248,"children":249},"li",{},[250,255],{"type":31,"tag":60,"props":251,"children":252},{},[253],{"type":36,"value":254},"Customer interviews — free, highest signal.",{"type":36,"value":256}," Twenty real conversations cost you nothing but time and the discomfort of asking. They'll tell you more about whether your idea has legs than the first month of a build ever could.",{"type":31,"tag":247,"props":258,"children":259},{},[260,265],{"type":31,"tag":60,"props":261,"children":262},{},[263],{"type":36,"value":264},"A landing page plus a little ad spend — $200 to $500.",{"type":36,"value":266}," Put up a one-page site describing the product, add a \"sign up for early access\" button, and send some targeted ads at it. Real strangers either click and sign up or they don't. That's a demand signal, bought for a few hundred dollars.",{"type":31,"tag":247,"props":268,"children":269},{},[270,275],{"type":31,"tag":60,"props":271,"children":272},{},[273],{"type":36,"value":274},"A concierge or manual MVP — your own labor.",{"type":36,"value":276}," Deliver the value by hand before you automate any of it. Airbnb's founders started by literally renting out air mattresses in their own apartment — no platform, no app, just the bare service. If you can't deliver the value manually to ten people, software won't save you. If you can, you've learned exactly what to build.",{"type":31,"tag":247,"props":278,"children":279},{},[280,285],{"type":31,"tag":60,"props":281,"children":282},{},[283],{"type":36,"value":284},"Pre-sales or deposits — the strongest signal there is.",{"type":36,"value":286}," Ask people to pay before the product exists. A deposit, a pre-order, a paid pilot. Nothing separates \"I love this idea\" from \"I'll actually pay for this\" like asking for money. It's the highest-confidence validation you can get.",{"type":31,"tag":32,"props":288,"children":289},{},[290,292,297,299,305],{"type":36,"value":291},"Now the comparison that matters. A typical MVP runs ",{"type":31,"tag":60,"props":293,"children":294},{},[295],{"type":36,"value":296},"$15,000 to $50,000 and takes two to four months",{"type":36,"value":298}," to build — ",{"type":31,"tag":213,"props":300,"children":302},{"href":301},"/blog/mvp-development-cost/",[303],{"type":36,"value":304},"here's the full cost breakdown",{"type":36,"value":306},". Two to four weeks and roughly $1,000 to $2,000 of validation can tell you whether that build is worth starting. The validation isn't a delay. It's insurance on the most expensive bet you're about to make.",{"type":31,"tag":32,"props":308,"children":309},{},[310],{"type":36,"value":311},"If a $300 landing page would answer your question, run the landing page first. The MVP will still be there next month — and you'll build a much better one for having waited.",{"type":31,"tag":80,"props":313,"children":315},{"id":314},"sign-6-youre-building-to-raise-not-to-learn",[316],{"type":36,"value":317},"Sign 6 — You're Building to Raise, Not to Learn",{"type":31,"tag":32,"props":319,"children":320},{},[321],{"type":36,"value":322},"Some founders don't really want an MVP. They want a demo to wave at investors. The build becomes a prop.",{"type":31,"tag":32,"props":324,"children":325},{},[326],{"type":36,"value":327},"We understand the pressure. But a polished demo with no validation underneath it is a fragile foundation, and good investors can feel the hollowness. What they actually want isn't polish — it's evidence of demand. Twenty users who signed up. Ten who paid a deposit. A waitlist that grew without you begging. Those are worth more in a pitch than the slickest demo of a product nobody's asked for.",{"type":31,"tag":32,"props":329,"children":330},{},[331],{"type":36,"value":332},"Build to learn, and the fundraising story writes itself. Build to raise, and you've built a beautiful answer to a question no investor was really asking.",{"type":31,"tag":80,"props":334,"children":336},{"id":335},"when-you-are-ready-and-what-comes-next",[337],{"type":36,"value":338},"When You ARE Ready (And What Comes Next)",{"type":31,"tag":32,"props":340,"children":341},{},[342],{"type":36,"value":343},"We've spent six sections on the brakes. Here's the green light — because most founders reading this are closer than they fear.",{"type":31,"tag":32,"props":345,"children":346},{},[347],{"type":36,"value":348},"You're ready to build an MVP when you can check these:",{"type":31,"tag":243,"props":350,"children":353},{"className":351},[352],"contains-task-list",[354,366,375,384,393],{"type":31,"tag":247,"props":355,"children":358},{"className":356},[357],"task-list-item",[359,364],{"type":31,"tag":360,"props":361,"children":363},"input",{"disabled":15,"type":362},"checkbox",[],{"type":36,"value":365}," You can state your hypothesis in one sentence.",{"type":31,"tag":247,"props":367,"children":369},{"className":368},[357],[370,373],{"type":31,"tag":360,"props":371,"children":372},{"disabled":15,"type":362},[],{"type":36,"value":374}," You've had at least 20 real conversations with your target users.",{"type":31,"tag":247,"props":376,"children":378},{"className":377},[357],[379,382],{"type":31,"tag":360,"props":380,"children":381},{"disabled":15,"type":362},[],{"type":36,"value":383}," You've defined one or two measurable signs of success.",{"type":31,"tag":247,"props":385,"children":387},{"className":386},[357],[388,391],{"type":31,"tag":360,"props":389,"children":390},{"disabled":15,"type":362},[],{"type":36,"value":392}," You've cut the scope to the one assumption that matters most.",{"type":31,"tag":247,"props":394,"children":396},{"className":395},[357],[397,400],{"type":31,"tag":360,"props":398,"children":399},{"disabled":15,"type":362},[],{"type":36,"value":401}," You have evidence that someone has a problem worth paying to solve.",{"type":31,"tag":32,"props":403,"children":404},{},[405,407,412,414,419,421,427],{"type":36,"value":406},"If that's you, stop reading and go build — but build it right. Start with ",{"type":31,"tag":213,"props":408,"children":409},{"href":215},[410],{"type":36,"value":411},"a tight scope",{"type":36,"value":413},", price it honestly with ",{"type":31,"tag":213,"props":415,"children":416},{"href":301},[417],{"type":36,"value":418},"our MVP cost guide",{"type":36,"value":420},", then follow ",{"type":31,"tag":213,"props":422,"children":424},{"href":423},"/blog/mvp-development-process/",[425],{"type":36,"value":426},"the eight-week build process",{"type":36,"value":428}," that turns a validated idea into a working product.",{"type":31,"tag":32,"props":430,"children":431},{},[432,434,440,442,447],{"type":36,"value":433},"This is exactly the path ",{"type":31,"tag":213,"props":435,"children":437},{"href":436},"/case-studies/eitoss/",[438],{"type":36,"value":439},"Eitoss",{"type":36,"value":441}," took. They came to us ",{"type":31,"tag":44,"props":443,"children":444},{},[445],{"type":36,"value":446},"ready",{"type":36,"value":448}," — a clear problem, a real market need they'd already confirmed. There was nothing to second-guess. So we scoped it tight and shipped their MVP in three months. They raised funding, and we've been building together for more than two years since. Readiness is the whole reason that timeline held. Eitoss is what \"you're ready\" looks like — and proof that the wait, when it's needed, pays off.",{"type":31,"tag":32,"props":450,"children":451},{},[452,454,460],{"type":36,"value":453},"We've sat on the founder's side of this table too. Before we committed our own team to building ",{"type":31,"tag":213,"props":455,"children":457},{"href":456},"/blog/why-we-built-formester/",[458],{"type":36,"value":459},"Formester",{"type":36,"value":461},", our own SaaS product, we pressure-tested the idea first — because betting your own money on an unvalidated guess is exactly as painful as it sounds. That product is live and growing today, with a 4.7 rating. It got there because we did the validation before the build, not after.",{"type":31,"tag":80,"props":463,"children":465},{"id":464},"why-wed-rather-tell-you-to-wait",[466],{"type":36,"value":467},"Why We'd Rather Tell You to Wait",{"type":31,"tag":32,"props":469,"children":470},{},[471],{"type":36,"value":472},"Here's the part that probably explains this whole article.",{"type":31,"tag":32,"props":474,"children":475},{},[476,478,483,485,491],{"type":36,"value":477},"We're not interested in one-off projects. We're interested in partnerships — clients who ship something real, see it work, and keep building with us for years. ",{"type":31,"tag":213,"props":479,"children":480},{"href":436},[481],{"type":36,"value":482},"Eitoss has been with us for over two years.",{"type":36,"value":484}," ",{"type":31,"tag":213,"props":486,"children":488},{"href":487},"/services/resource-augmentation/",[489],{"type":36,"value":490},"PerformLine grew from one engineer to eight-plus over two years.",{"type":36,"value":492}," Those relationships don't start with us taking a check to build the wrong thing.",{"type":31,"tag":32,"props":494,"children":495},{},[496],{"type":36,"value":497},"If we build something the market doesn't want, two things happen: you burn your runway, and we burn your trust. We'd rather tell you to validate first, watch you come back when you're ready, and build something that actually works. That's not generosity. It's just the long game — and it's the only game we play.",{"type":31,"tag":32,"props":499,"children":500},{},[501],{"type":36,"value":502},"So we'll tell you honestly what you need, and what can wait. Not to bill less, but so you don't burn your runway on the wrong thing.",{"type":31,"tag":80,"props":504,"children":506},{"id":505},"not-sure-if-youre-ready",[507],{"type":36,"value":508},"Not Sure If You're Ready?",{"type":31,"tag":32,"props":510,"children":511},{},[512],{"type":36,"value":513},"Talk to us. We'll give you an honest read — build now, validate first, or wait — no commitment. If the answer is \"you're ready,\" we'll help you scope it. If it's \"test this cheaper first,\" we'll tell you exactly how. Either way, you'll leave the conversation knowing more than you came in with.",{"type":31,"tag":32,"props":515,"children":516},{},[517,523,525,531],{"type":31,"tag":213,"props":518,"children":520},{"href":519},"/contact/",[521],{"type":36,"value":522},"Book an honest assessment",{"type":36,"value":524},", or read more about ",{"type":31,"tag":213,"props":526,"children":528},{"href":527},"/services/mvp-development/",[529],{"type":36,"value":530},"how we approach MVP development",{"type":36,"value":532},".",{"type":31,"tag":534,"props":535,"children":536},"hr",{},[],{"type":31,"tag":32,"props":538,"children":539},{},[540],{"type":31,"tag":44,"props":541,"children":542},{},[543,545,550,552,557,558],{"type":36,"value":544},"Related reading: ",{"type":31,"tag":213,"props":546,"children":547},{"href":215},[548],{"type":36,"value":549},"How to Scope a Software Project Before You Spend a Dollar",{"type":36,"value":551}," | ",{"type":31,"tag":213,"props":553,"children":554},{"href":301},[555],{"type":36,"value":556},"How Much Does MVP Development Cost in 2026?",{"type":36,"value":551},{"type":31,"tag":213,"props":559,"children":560},{"href":456},[561],{"type":36,"value":562},"Why We Built Formester",{"title":7,"searchDepth":564,"depth":564,"links":565},2,[566,567,568,569,570,571,572,573,574],{"id":82,"depth":564,"text":85},{"id":113,"depth":564,"text":116},{"id":146,"depth":564,"text":149},{"id":179,"depth":564,"text":182},{"id":223,"depth":564,"text":226},{"id":314,"depth":564,"text":317},{"id":335,"depth":564,"text":338},{"id":464,"depth":564,"text":467},{"id":505,"depth":564,"text":508},"markdown","content:blog:when-not-to-build-an-mvp.md","content","blog/when-not-to-build-an-mvp.md","blog/when-not-to-build-an-mvp","md",[582,1559],{"_path":583,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":556,"description":584,"topic":10,"author":11,"authorProfile":12,"coverImg":585,"coverImgAlt":586,"published":15,"toc":15,"readingTime":587,"createdAt":588,"updatedAt":589,"keywords":590,"body":599,"_type":575,"_id":1556,"_source":577,"_file":1557,"_stem":1558,"_extension":580},"/blog/mvp-development-cost","MVP development costs $15,000 to $200,000+ in 2026. We break down real pricing by type, team model, and complexity — plus hidden costs most guides skip.","/images/blog/mvp-development-cost.webp","How much does MVP development cost in 2026 — a founder's honest guide","18 min read","2026-04-03","2026-04-20",[591,592,593,594,595,596,597,598],"how much does MVP development cost","MVP development cost 2026","cost to build an MVP","MVP development pricing","MVP cost breakdown","SaaS MVP cost","minimum viable product cost","startup MVP budget",{"type":28,"children":600,"toc":1530},[601,606,618,624,629,752,757,763,770,782,787,795,818,826,854,866,878,884,889,988,1000,1006,1011,1016,1022,1045,1050,1056,1061,1067,1072,1077,1083,1088,1093,1104,1110,1120,1125,1130,1136,1141,1146,1152,1157,1167,1177,1185,1208,1213,1224,1230,1236,1241,1247,1252,1258,1263,1316,1321,1327,1332,1337,1343,1348,1364,1374,1384,1401,1407,1412,1422,1432,1448,1453,1459,1479,1497,1500],{"type":31,"tag":32,"props":602,"children":603},{},[604],{"type":36,"value":605},"You're trying to figure out how much it costs to build an MVP. You've probably seen answers ranging from $5,000 to $500,000, which isn't helpful. Let's fix that.",{"type":31,"tag":32,"props":607,"children":608},{},[609,611,616],{"type":36,"value":610},"Here's the honest answer — from a team that's built MVPs for clients and ",{"type":31,"tag":213,"props":612,"children":613},{"href":456},[614],{"type":36,"value":615},"built our own SaaS product",{"type":36,"value":617}," from scratch.",{"type":31,"tag":80,"props":619,"children":621},{"id":620},"the-short-answer",[622],{"type":36,"value":623},"The Short Answer",{"type":31,"tag":32,"props":625,"children":626},{},[627],{"type":36,"value":628},"Here's what MVP development actually costs in 2026, broken down by type:",{"type":31,"tag":630,"props":631,"children":632},"table",{},[633,658],{"type":31,"tag":634,"props":635,"children":636},"thead",{},[637],{"type":31,"tag":638,"props":639,"children":640},"tr",{},[641,647,653],{"type":31,"tag":642,"props":643,"children":644},"th",{},[645],{"type":36,"value":646},"MVP Type",{"type":31,"tag":642,"props":648,"children":650},{"align":649},"right",[651],{"type":36,"value":652},"Typical Cost Range",{"type":31,"tag":642,"props":654,"children":655},{},[656],{"type":36,"value":657},"Timeline",{"type":31,"tag":659,"props":660,"children":661},"tbody",{},[662,681,699,716,734],{"type":31,"tag":638,"props":663,"children":664},{},[665,671,676],{"type":31,"tag":666,"props":667,"children":668},"td",{},[669],{"type":36,"value":670},"Simple web app (1 platform, core features)",{"type":31,"tag":666,"props":672,"children":673},{"align":649},[674],{"type":36,"value":675},"$15,000 -- $40,000",{"type":31,"tag":666,"props":677,"children":678},{},[679],{"type":36,"value":680},"6--8 weeks",{"type":31,"tag":638,"props":682,"children":683},{},[684,689,694],{"type":31,"tag":666,"props":685,"children":686},{},[687],{"type":36,"value":688},"SaaS MVP (user accounts, billing, dashboard)",{"type":31,"tag":666,"props":690,"children":691},{"align":649},[692],{"type":36,"value":693},"$25,000 -- $75,000",{"type":31,"tag":666,"props":695,"children":696},{},[697],{"type":36,"value":698},"8--12 weeks",{"type":31,"tag":638,"props":700,"children":701},{},[702,707,712],{"type":31,"tag":666,"props":703,"children":704},{},[705],{"type":36,"value":706},"Mobile MVP (iOS or Android)",{"type":31,"tag":666,"props":708,"children":709},{"align":649},[710],{"type":36,"value":711},"$25,000 -- $60,000",{"type":31,"tag":666,"props":713,"children":714},{},[715],{"type":36,"value":698},{"type":31,"tag":638,"props":717,"children":718},{},[719,724,729],{"type":31,"tag":666,"props":720,"children":721},{},[722],{"type":36,"value":723},"Cross-platform mobile (iOS + Android)",{"type":31,"tag":666,"props":725,"children":726},{"align":649},[727],{"type":36,"value":728},"$35,000 -- $80,000",{"type":31,"tag":666,"props":730,"children":731},{},[732],{"type":36,"value":733},"10--14 weeks",{"type":31,"tag":638,"props":735,"children":736},{},[737,742,747],{"type":31,"tag":666,"props":738,"children":739},{},[740],{"type":36,"value":741},"Complex MVP (AI/ML, real-time, multi-platform)",{"type":31,"tag":666,"props":743,"children":744},{"align":649},[745],{"type":36,"value":746},"$60,000 -- $200,000+",{"type":31,"tag":666,"props":748,"children":749},{},[750],{"type":36,"value":751},"12--20 weeks",{"type":31,"tag":32,"props":753,"children":754},{},[755],{"type":36,"value":756},"These ranges are wide because every MVP is different. The next section explains what actually drives your specific cost up or down.",{"type":31,"tag":80,"props":758,"children":760},{"id":759},"what-actually-drives-the-cost",[761],{"type":36,"value":762},"What Actually Drives the Cost",{"type":31,"tag":764,"props":765,"children":767},"h3",{"id":766},"scope-and-feature-complexity",[768],{"type":36,"value":769},"Scope and Feature Complexity",{"type":31,"tag":32,"props":771,"children":772},{},[773,775,780],{"type":36,"value":774},"This is the biggest cost driver — by far. It's also the one you have the most control over, before you spend a dollar. ",{"type":31,"tag":213,"props":776,"children":777},{"href":215},[778],{"type":36,"value":779},"Scoping the project tightly up front",{"type":36,"value":781}," is the cheapest way to keep this number down.",{"type":31,"tag":32,"props":783,"children":784},{},[785],{"type":36,"value":786},"Here's a framework we use with every client: separate your features into \"must-have for launch\" and \"important but can wait.\"",{"type":31,"tag":32,"props":788,"children":789},{},[790],{"type":31,"tag":60,"props":791,"children":792},{},[793],{"type":36,"value":794},"Must-have for launch (your MVP):",{"type":31,"tag":243,"props":796,"children":797},{},[798,803,808,813],{"type":31,"tag":247,"props":799,"children":800},{},[801],{"type":36,"value":802},"User authentication and onboarding",{"type":31,"tag":247,"props":804,"children":805},{},[806],{"type":36,"value":807},"The core workflow that tests your main hypothesis",{"type":31,"tag":247,"props":809,"children":810},{},[811],{"type":36,"value":812},"Payment integration (if your model requires it)",{"type":31,"tag":247,"props":814,"children":815},{},[816],{"type":36,"value":817},"Basic admin functions",{"type":31,"tag":32,"props":819,"children":820},{},[821],{"type":31,"tag":60,"props":822,"children":823},{},[824],{"type":36,"value":825},"Important but can wait (your v2):",{"type":31,"tag":243,"props":827,"children":828},{},[829,834,839,844,849],{"type":31,"tag":247,"props":830,"children":831},{},[832],{"type":36,"value":833},"Admin dashboard with analytics",{"type":31,"tag":247,"props":835,"children":836},{},[837],{"type":36,"value":838},"Push notifications",{"type":31,"tag":247,"props":840,"children":841},{},[842],{"type":36,"value":843},"Advanced user roles and permissions",{"type":31,"tag":247,"props":845,"children":846},{},[847],{"type":36,"value":848},"Third-party integrations beyond the essentials",{"type":31,"tag":247,"props":850,"children":851},{},[852],{"type":36,"value":853},"Mobile app (if your web app is the core)",{"type":31,"tag":32,"props":855,"children":856},{},[857,859,864],{"type":36,"value":858},"When we built ",{"type":31,"tag":213,"props":860,"children":862},{"href":861},"/case-studies/formester/",[863],{"type":36,"value":459},{"type":36,"value":865},", we started with a list of 30+ features. We launched with eight. Users didn't miss the other 22 — they told us what to build next based on how they actually used the product. That taught us more in two weeks than our feature planning taught us in two months.",{"type":31,"tag":32,"props":867,"children":868},{},[869,871,876],{"type":36,"value":870},"We apply the same discipline with clients. When we scoped ",{"type":31,"tag":213,"props":872,"children":873},{"href":436},[874],{"type":36,"value":875},"Eitoss's MVP",{"type":36,"value":877},", we focused on the features that would let them put the product in front of real users and demonstrate traction to investors. Everything else waited.",{"type":31,"tag":764,"props":879,"children":881},{"id":880},"team-structure-and-location",[882],{"type":36,"value":883},"Team Structure and Location",{"type":31,"tag":32,"props":885,"children":886},{},[887],{"type":36,"value":888},"Who builds your MVP significantly affects cost:",{"type":31,"tag":630,"props":890,"children":891},{},[892,913],{"type":31,"tag":634,"props":893,"children":894},{},[895],{"type":31,"tag":638,"props":896,"children":897},{},[898,903,908],{"type":31,"tag":642,"props":899,"children":900},{},[901],{"type":36,"value":902},"Team Model",{"type":31,"tag":642,"props":904,"children":905},{"align":649},[906],{"type":36,"value":907},"Typical Rate (per developer/hr)",{"type":31,"tag":642,"props":909,"children":910},{},[911],{"type":36,"value":912},"Tradeoffs",{"type":31,"tag":659,"props":914,"children":915},{},[916,934,952,970],{"type":31,"tag":638,"props":917,"children":918},{},[919,924,929],{"type":31,"tag":666,"props":920,"children":921},{},[922],{"type":36,"value":923},"In-house (US)",{"type":31,"tag":666,"props":925,"children":926},{"align":649},[927],{"type":36,"value":928},"$120 -- $200",{"type":31,"tag":666,"props":930,"children":931},{},[932],{"type":36,"value":933},"Full control, but slow to hire (3-6 months) and expensive",{"type":31,"tag":638,"props":935,"children":936},{},[937,942,947],{"type":31,"tag":666,"props":938,"children":939},{},[940],{"type":36,"value":941},"Agency (India)",{"type":31,"tag":666,"props":943,"children":944},{"align":649},[945],{"type":36,"value":946},"$20 -- $50",{"type":31,"tag":666,"props":948,"children":949},{},[950],{"type":36,"value":951},"Managed team, process in place, cost-effective for quality",{"type":31,"tag":638,"props":953,"children":954},{},[955,960,965],{"type":31,"tag":666,"props":956,"children":957},{},[958],{"type":36,"value":959},"Freelancers",{"type":31,"tag":666,"props":961,"children":962},{"align":649},[963],{"type":36,"value":964},"$15 -- $150",{"type":31,"tag":666,"props":966,"children":967},{},[968],{"type":36,"value":969},"Flexible but variable quality, availability risk",{"type":31,"tag":638,"props":971,"children":972},{},[973,978,983],{"type":31,"tag":666,"props":974,"children":975},{},[976],{"type":36,"value":977},"Agency (US/Europe)",{"type":31,"tag":666,"props":979,"children":980},{"align":649},[981],{"type":36,"value":982},"$100 -- $200",{"type":31,"tag":666,"props":984,"children":985},{},[986],{"type":36,"value":987},"High quality, but pricing often matches in-house costs",{"type":31,"tag":32,"props":989,"children":990},{},[991,993,998],{"type":36,"value":992},"A note on the agency model: not all agencies are the same. Some assign a rotating pool of developers. Others — ",{"type":31,"tag":213,"props":994,"children":995},{"href":527},[996],{"type":36,"value":997},"like us",{"type":36,"value":999}," — assign dedicated engineers who stay on your project from start to finish. You'll know them by name. The difference shows in the product.",{"type":31,"tag":764,"props":1001,"children":1003},{"id":1002},"platform-choice",[1004],{"type":36,"value":1005},"Platform Choice",{"type":31,"tag":32,"props":1007,"children":1008},{},[1009],{"type":36,"value":1010},"Building for one platform first saves 30-40% compared to building for web and mobile simultaneously. If you're not sure where your users will be, start with web. It's faster to build, easier to iterate, and you can always add mobile once you've validated the product.",{"type":31,"tag":32,"props":1012,"children":1013},{},[1014],{"type":36,"value":1015},"Cross-platform frameworks (React Native, Flutter) can reduce the mobile gap, but they add complexity. For an MVP, pick one platform and do it well.",{"type":31,"tag":764,"props":1017,"children":1019},{"id":1018},"design-complexity",[1020],{"type":36,"value":1021},"Design Complexity",{"type":31,"tag":243,"props":1023,"children":1024},{},[1025,1035],{"type":31,"tag":247,"props":1026,"children":1027},{},[1028,1033],{"type":31,"tag":60,"props":1029,"children":1030},{},[1031],{"type":36,"value":1032},"Wireframes and functional design:",{"type":36,"value":1034}," Usually included in agency pricing. Gets the UX right without pixel-perfect polish.",{"type":31,"tag":247,"props":1036,"children":1037},{},[1038,1043],{"type":31,"tag":60,"props":1039,"children":1040},{},[1041],{"type":36,"value":1042},"Pixel-perfect UI design:",{"type":36,"value":1044}," Adds $5,000 -- $15,000+ depending on screens. Worth it for consumer-facing products. Can wait for most B2B MVPs.",{"type":31,"tag":32,"props":1046,"children":1047},{},[1048],{"type":36,"value":1049},"We include wireframes and functional design in our MVP engagements. For pixel-perfect design, we recommend working with a dedicated designer — and we can connect you with good ones.",{"type":31,"tag":80,"props":1051,"children":1053},{"id":1052},"the-costs-nobody-tells-you-about",[1054],{"type":36,"value":1055},"The Costs Nobody Tells You About",{"type":31,"tag":32,"props":1057,"children":1058},{},[1059],{"type":36,"value":1060},"Most MVP cost guides stop at development. That's where the surprises start.",{"type":31,"tag":764,"props":1062,"children":1064},{"id":1063},"post-launch-infrastructure",[1065],{"type":36,"value":1066},"Post-Launch Infrastructure",{"type":31,"tag":32,"props":1068,"children":1069},{},[1070],{"type":36,"value":1071},"Your MVP needs somewhere to live. Cloud hosting (AWS, GCP, Azure) typically runs $100 -- $500/month for a new product. Add monitoring tools, error tracking, email services, and you're looking at $200 -- $800/month before you have significant traffic.",{"type":31,"tag":32,"props":1073,"children":1074},{},[1075],{"type":36,"value":1076},"This isn't a lot, but founders who don't budget for it get caught off guard.",{"type":31,"tag":764,"props":1078,"children":1080},{"id":1079},"scope-creep",[1081],{"type":36,"value":1082},"Scope Creep",{"type":31,"tag":32,"props":1084,"children":1085},{},[1086],{"type":36,"value":1087},"The most expensive word in startups is \"also.\"",{"type":31,"tag":32,"props":1089,"children":1090},{},[1091],{"type":36,"value":1092},"\"Can we also add...\" is how a $30,000 MVP becomes a $60,000 one. It happens slowly — a feature here, a \"small change\" there. Each one seems reasonable in isolation. Together, they double your timeline and budget.",{"type":31,"tag":32,"props":1094,"children":1095},{},[1096,1098,1103],{"type":36,"value":1097},"This is why we scope aggressively upfront and push back on additions during the build. Not because we don't want to help — because we've seen what happens when scope isn't disciplined. We've felt it on ",{"type":31,"tag":213,"props":1099,"children":1100},{"href":456},[1101],{"type":36,"value":1102},"our own product",{"type":36,"value":532},{"type":31,"tag":764,"props":1105,"children":1107},{"id":1106},"the-cost-of-getting-it-wrong",[1108],{"type":36,"value":1109},"The Cost of Getting It Wrong",{"type":31,"tag":32,"props":1111,"children":1112},{},[1113,1115],{"type":36,"value":1114},"Here's the number nobody puts in their guide: ",{"type":31,"tag":60,"props":1116,"children":1117},{},[1118],{"type":36,"value":1119},"rewriting a bad MVP costs 2-3x the original build.",{"type":31,"tag":32,"props":1121,"children":1122},{},[1123],{"type":36,"value":1124},"If you hire a cheap freelancer who ships code without tests, no CI/CD, and an architecture that can't scale — you'll be paying to rebuild it within 6-12 months. We've taken over codebases from failed first attempts. The rewrite is always more expensive than doing it right would have been.",{"type":31,"tag":32,"props":1126,"children":1127},{},[1128],{"type":36,"value":1129},"Build production-quality from day one. Your MVP might become your product. It did for every successful startup.",{"type":31,"tag":764,"props":1131,"children":1133},{"id":1132},"compliance-and-security",[1134],{"type":36,"value":1135},"Compliance and Security",{"type":31,"tag":32,"props":1137,"children":1138},{},[1139],{"type":36,"value":1140},"If your product handles health data (HIPAA), financial data, or European users (GDPR), compliance adds $5,000 -- $20,000 to your MVP cost. This includes secure data handling, audit logging, encryption standards, and potentially third-party compliance review.",{"type":31,"tag":32,"props":1142,"children":1143},{},[1144],{"type":36,"value":1145},"Don't skip this. The fines are worse than the upfront cost.",{"type":31,"tag":80,"props":1147,"children":1149},{"id":1148},"how-your-mvp-budget-connects-to-fundraising",[1150],{"type":36,"value":1151},"How Your MVP Budget Connects to Fundraising",{"type":31,"tag":32,"props":1153,"children":1154},{},[1155],{"type":36,"value":1156},"This is the section most MVP guides skip — and it might be the most important one if you're raising capital.",{"type":31,"tag":32,"props":1158,"children":1159},{},[1160,1165],{"type":31,"tag":60,"props":1161,"children":1162},{},[1163],{"type":36,"value":1164},"The math matters.",{"type":36,"value":1166}," If you're raising a $500K seed round and spending $200K on your MVP, you've used 40% of your runway before you've acquired a single user. That leaves you 6-8 months to find product-market fit, which is tight.",{"type":31,"tag":32,"props":1168,"children":1169},{},[1170,1175],{"type":31,"tag":60,"props":1171,"children":1172},{},[1173],{"type":36,"value":1174},"A better rule of thumb:",{"type":36,"value":1176}," Your MVP should cost 15-30% of your total runway. That leaves room for iteration, marketing, hiring, and the unexpected.",{"type":31,"tag":32,"props":1178,"children":1179},{},[1180],{"type":31,"tag":60,"props":1181,"children":1182},{},[1183],{"type":36,"value":1184},"What investors actually want to see:",{"type":31,"tag":243,"props":1186,"children":1187},{},[1188,1193,1198,1203],{"type":31,"tag":247,"props":1189,"children":1190},{},[1191],{"type":36,"value":1192},"A working product with real users (even a handful)",{"type":31,"tag":247,"props":1194,"children":1195},{},[1196],{"type":36,"value":1197},"Evidence that you can build and ship efficiently",{"type":31,"tag":247,"props":1199,"children":1200},{},[1201],{"type":36,"value":1202},"A team that can iterate based on feedback",{"type":31,"tag":247,"props":1204,"children":1205},{},[1206],{"type":36,"value":1207},"Enough runway to reach the next milestone",{"type":31,"tag":32,"props":1209,"children":1210},{},[1211],{"type":36,"value":1212},"Investors don't want a polished, feature-complete product. They want proof that your team can execute and that your hypothesis has legs. A focused MVP that costs $30,000 and has 50 active users is more compelling than a $150,000 product that nobody's using.",{"type":31,"tag":32,"props":1214,"children":1215},{},[1216,1218,1222],{"type":36,"value":1217},"When we shipped ",{"type":31,"tag":213,"props":1219,"children":1220},{"href":436},[1221],{"type":36,"value":875},{"type":36,"value":1223},", we focused on what they needed to demonstrate traction to investors. Demoable product in 8 weeks. Live with real users in 3 months. They raised funding. The MVP didn't need to do everything — it needed to prove the concept.",{"type":31,"tag":80,"props":1225,"children":1227},{"id":1226},"how-to-spend-less-without-building-less",[1228],{"type":36,"value":1229},"How to Spend Less Without Building Less",{"type":31,"tag":764,"props":1231,"children":1233},{"id":1232},"prioritize-ruthlessly",[1234],{"type":36,"value":1235},"Prioritize Ruthlessly",{"type":31,"tag":32,"props":1237,"children":1238},{},[1239],{"type":36,"value":1240},"Build the one thing that tests your riskiest assumption. If your startup's hypothesis is \"small businesses will pay for automated invoice reminders,\" your MVP is the reminder system — not the full invoicing platform.",{"type":31,"tag":764,"props":1242,"children":1244},{"id":1243},"start-with-one-platform",[1245],{"type":36,"value":1246},"Start With One Platform",{"type":31,"tag":32,"props":1248,"children":1249},{},[1250],{"type":36,"value":1251},"Web first, mobile later. Or vice versa — but pick one. You can always expand after validation.",{"type":31,"tag":764,"props":1253,"children":1255},{"id":1254},"use-what-already-exists",[1256],{"type":36,"value":1257},"Use What Already Exists",{"type":31,"tag":32,"props":1259,"children":1260},{},[1261],{"type":36,"value":1262},"Don't build what you can buy or integrate:",{"type":31,"tag":243,"props":1264,"children":1265},{},[1266,1276,1286,1296,1306],{"type":31,"tag":247,"props":1267,"children":1268},{},[1269,1274],{"type":31,"tag":60,"props":1270,"children":1271},{},[1272],{"type":36,"value":1273},"Authentication:",{"type":36,"value":1275}," Auth0, Clerk, Firebase Auth",{"type":31,"tag":247,"props":1277,"children":1278},{},[1279,1284],{"type":31,"tag":60,"props":1280,"children":1281},{},[1282],{"type":36,"value":1283},"Payments:",{"type":36,"value":1285}," Stripe, Razorpay",{"type":31,"tag":247,"props":1287,"children":1288},{},[1289,1294],{"type":31,"tag":60,"props":1290,"children":1291},{},[1292],{"type":36,"value":1293},"Email:",{"type":36,"value":1295}," SendGrid, Postmark",{"type":31,"tag":247,"props":1297,"children":1298},{},[1299,1304],{"type":31,"tag":60,"props":1300,"children":1301},{},[1302],{"type":36,"value":1303},"Cloud:",{"type":36,"value":1305}," AWS, GCP (both have startup credits programs)",{"type":31,"tag":247,"props":1307,"children":1308},{},[1309,1314],{"type":31,"tag":60,"props":1310,"children":1311},{},[1312],{"type":36,"value":1313},"Analytics:",{"type":36,"value":1315}," Mixpanel, PostHog (open-source)",{"type":31,"tag":32,"props":1317,"children":1318},{},[1319],{"type":36,"value":1320},"Every integration you use instead of building saves 1-3 weeks of development time.",{"type":31,"tag":764,"props":1322,"children":1324},{"id":1323},"choose-a-fixed-price-or-capped-engagement",[1325],{"type":36,"value":1326},"Choose a Fixed-Price or Capped Engagement",{"type":31,"tag":32,"props":1328,"children":1329},{},[1330],{"type":36,"value":1331},"Know your ceiling before you start building. Fixed-price engagements mean you agree on scope and cost upfront. Capped time-and-materials means you get flexibility on features but a hard budget limit.",{"type":31,"tag":32,"props":1333,"children":1334},{},[1335],{"type":36,"value":1336},"We offer both. The right model depends on how well-defined your scope is when we start.",{"type":31,"tag":80,"props":1338,"children":1340},{"id":1339},"what-to-look-for-in-an-mvp-development-partner",[1341],{"type":36,"value":1342},"What to Look for in an MVP Development Partner",{"type":31,"tag":32,"props":1344,"children":1345},{},[1346],{"type":36,"value":1347},"Before you commit to anyone — agency, freelancer, or in-house hire — ask these questions:",{"type":31,"tag":32,"props":1349,"children":1350},{},[1351,1356,1358,1362],{"type":31,"tag":60,"props":1352,"children":1353},{},[1354],{"type":36,"value":1355},"Do they build their own products?",{"type":36,"value":1357}," A team that's built and maintained their own product understands the founder experience in a way that pure service companies don't. We built ",{"type":31,"tag":213,"props":1359,"children":1360},{"href":456},[1361],{"type":36,"value":459},{"type":36,"value":1363},". It taught us what ownership really means.",{"type":31,"tag":32,"props":1365,"children":1366},{},[1367,1372],{"type":31,"tag":60,"props":1368,"children":1369},{},[1370],{"type":36,"value":1371},"Do they guide scope or just take orders?",{"type":36,"value":1373}," If your development partner says yes to everything, they're not protecting your budget or your timeline. You want a team that tells you what you need — and what can wait.",{"type":31,"tag":32,"props":1375,"children":1376},{},[1377,1382],{"type":31,"tag":60,"props":1378,"children":1379},{},[1380],{"type":36,"value":1381},"Who owns the code?",{"type":36,"value":1383}," You should own 100% of your code from day one. No proprietary frameworks. No lock-in. If you want to bring development in-house later, your code should be ready for that.",{"type":31,"tag":32,"props":1385,"children":1386},{},[1387,1392,1394,1399],{"type":31,"tag":60,"props":1388,"children":1389},{},[1390],{"type":36,"value":1391},"What happens after launch?",{"type":36,"value":1393}," An MVP that ships and then gets abandoned is a waste of money. Ask what post-launch support looks like. Ask if they've stayed with clients beyond the initial build. ",{"type":31,"tag":213,"props":1395,"children":1396},{"href":436},[1397],{"type":36,"value":1398},"We have",{"type":36,"value":1400}," — Eitoss started as an MVP engagement, and we've been building together for over 2 years.",{"type":31,"tag":80,"props":1402,"children":1404},{"id":1403},"what-happens-after-the-mvp-ships",[1405],{"type":36,"value":1406},"What Happens After the MVP Ships?",{"type":31,"tag":32,"props":1408,"children":1409},{},[1410],{"type":36,"value":1411},"Your MVP is the beginning, not the end. Here's what to budget for after launch:",{"type":31,"tag":32,"props":1413,"children":1414},{},[1415,1420],{"type":31,"tag":60,"props":1416,"children":1417},{},[1418],{"type":36,"value":1419},"Monthly maintenance:",{"type":36,"value":1421}," $1,000 -- $5,000/month, depending on complexity. This covers bug fixes, security patches, minor improvements, and infrastructure management.",{"type":31,"tag":32,"props":1423,"children":1424},{},[1425,1430],{"type":31,"tag":60,"props":1426,"children":1427},{},[1428],{"type":36,"value":1429},"Iteration based on user feedback:",{"type":36,"value":1431}," This is where the real product gets built. Budget for 2-3 months of iteration after launch. The features users ask for will surprise you — and they'll be different from what you planned.",{"type":31,"tag":32,"props":1433,"children":1434},{},[1435,1440,1442,1447],{"type":31,"tag":60,"props":1436,"children":1437},{},[1438],{"type":36,"value":1439},"Scaling:",{"type":36,"value":1441}," Once you find product-market fit, you'll need to scale the team, the infrastructure, or both. This is where the engagement model often shifts from project-based to ",{"type":31,"tag":213,"props":1443,"children":1444},{"href":487},[1445],{"type":36,"value":1446},"resource augmentation",{"type":36,"value":532},{"type":31,"tag":32,"props":1449,"children":1450},{},[1451],{"type":36,"value":1452},"Eitoss followed this exact path. MVP in 3 months. Raised funding. Kept building. We're still their engineering team 2+ years later. That continuity — having a team that knows the codebase, the users, and the product vision — saves months of ramp-up time.",{"type":31,"tag":80,"props":1454,"children":1456},{"id":1455},"ready-to-scope-your-mvp",[1457],{"type":36,"value":1458},"Ready to Scope Your MVP?",{"type":31,"tag":32,"props":1460,"children":1461},{},[1462,1464,1469,1471,1477],{"type":36,"value":1463},"If you're planning an MVP and want honest guidance on what to build, what to skip, and what it'll cost — ",{"type":31,"tag":213,"props":1465,"children":1466},{"href":519},[1467],{"type":36,"value":1468},"let's talk",{"type":36,"value":1470},". We'll give you a realistic timeline and budget, not a sales pitch. And if you're still weighing whether to build at all, it's worth reading ",{"type":31,"tag":213,"props":1472,"children":1474},{"href":1473},"/blog/when-not-to-build-an-mvp/",[1475],{"type":36,"value":1476},"when NOT to build an MVP",{"type":36,"value":1478}," first — sometimes the cheapest budget is the one you don't spend yet.",{"type":31,"tag":32,"props":1480,"children":1481},{},[1482,1484,1489,1491,1496],{"type":36,"value":1483},"You can also explore our ",{"type":31,"tag":213,"props":1485,"children":1486},{"href":527},[1487],{"type":36,"value":1488},"MVP development service",{"type":36,"value":1490}," or read about how we ",{"type":31,"tag":213,"props":1492,"children":1493},{"href":436},[1494],{"type":36,"value":1495},"shipped Eitoss from concept to funding",{"type":36,"value":532},{"type":31,"tag":534,"props":1498,"children":1499},{},[],{"type":31,"tag":32,"props":1501,"children":1502},{},[1503],{"type":31,"tag":44,"props":1504,"children":1505},{},[1506,1507,1511,1512,1516,1517,1523,1524],{"type":36,"value":544},{"type":31,"tag":213,"props":1508,"children":1509},{"href":215},[1510],{"type":36,"value":549},{"type":36,"value":551},{"type":31,"tag":213,"props":1513,"children":1514},{"href":1473},[1515],{"type":36,"value":8},{"type":36,"value":551},{"type":31,"tag":213,"props":1518,"children":1520},{"href":1519},"/blog/hire-developers-startup/",[1521],{"type":36,"value":1522},"How to Hire Developers for Your Startup Without Getting Burned",{"type":36,"value":551},{"type":31,"tag":213,"props":1525,"children":1527},{"href":1526},"/blog/freelancer-vs-agency-software-development/",[1528],{"type":36,"value":1529},"Freelancer vs. Agency for Software Development: An Honest Comparison",{"title":7,"searchDepth":564,"depth":564,"links":1531},[1532,1533,1540,1546,1547,1553,1554,1555],{"id":620,"depth":564,"text":623},{"id":759,"depth":564,"text":762,"children":1534},[1535,1537,1538,1539],{"id":766,"depth":1536,"text":769},3,{"id":880,"depth":1536,"text":883},{"id":1002,"depth":1536,"text":1005},{"id":1018,"depth":1536,"text":1021},{"id":1052,"depth":564,"text":1055,"children":1541},[1542,1543,1544,1545],{"id":1063,"depth":1536,"text":1066},{"id":1079,"depth":1536,"text":1082},{"id":1106,"depth":1536,"text":1109},{"id":1132,"depth":1536,"text":1135},{"id":1148,"depth":564,"text":1151},{"id":1226,"depth":564,"text":1229,"children":1548},[1549,1550,1551,1552],{"id":1232,"depth":1536,"text":1235},{"id":1243,"depth":1536,"text":1246},{"id":1254,"depth":1536,"text":1257},{"id":1323,"depth":1536,"text":1326},{"id":1339,"depth":564,"text":1342},{"id":1403,"depth":564,"text":1406},{"id":1455,"depth":564,"text":1458},"content:blog:mvp-development-cost.md","blog/mvp-development-cost.md","blog/mvp-development-cost",{"_path":1560,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1561,"description":1562,"topic":10,"author":1563,"authorProfile":1564,"coverImg":1565,"coverImgAlt":1566,"published":15,"toc":15,"readingTime":1567,"createdAt":1568,"updatedAt":589,"keywords":1569,"body":1576,"_type":575,"_id":2258,"_source":577,"_file":2259,"_stem":2260,"_extension":580},"/blog/mvp-development-process","MVP Development Process: What 8 Weeks Really Looks Like","A week-by-week breakdown of our real MVP development process -- from discovery to launch -- with the honest details most agencies leave out.","Ankit Singhaniya","https://in.linkedin.com/in/ankitsinghaniyaz","/images/blog/mvp-development-process.webp","MVP Development Process — a week-by-week breakdown of what building an MVP really looks like","16 min read","2026-04-09",[1570,1571,1572,1573,1574,1575],"mvp development process","mvp development timeline","how long does it take to build an mvp","mvp development steps","build mvp in 8 weeks","startup mvp timeline",{"type":28,"children":1577,"toc":2244},[1578,1583,1588,1599,1605,1610,1615,1638,1643,1649,1654,1665,1671,1676,1684,1707,1715,1741,1751,1756,1762,1767,1774,1797,1804,1822,1832,1837,1843,1848,1855,1878,1885,1898,1907,1912,1918,1923,1930,1953,1960,1978,1988,1993,1999,2004,2011,2039,2046,2069,2079,2085,2090,2095,2100,2105,2110,2115,2120,2126,2131,2148,2158,2168,2185,2191,2201,2211,2221,2227,2239],{"type":31,"tag":32,"props":1579,"children":1580},{},[1581],{"type":36,"value":1582},"You've heard it before. \"An MVP takes 4 to 12 weeks.\" That range is so wide it's practically useless.",{"type":31,"tag":32,"props":1584,"children":1585},{},[1586],{"type":36,"value":1587},"When you're a founder with runway to manage and investors to update, you need more than a range. You need to know what actually happens each week. What decisions you'll face. What your team is building while you're wondering if this is all going to come together.",{"type":31,"tag":32,"props":1589,"children":1590},{},[1591,1593,1597],{"type":36,"value":1592},"We've shipped MVPs for startups that went on to raise funding. We've also built our own product, ",{"type":31,"tag":213,"props":1594,"children":1595},{"href":456},[1596],{"type":36,"value":459},{"type":36,"value":1598},", from scratch. Here's what the MVP development process actually looks like when you break it down week by week -- including the parts that are uncomfortable.",{"type":31,"tag":80,"props":1600,"children":1602},{"id":1601},"why-most-mvp-timeline-guides-dont-help",[1603],{"type":36,"value":1604},"Why Most MVP Timeline Guides Don't Help",{"type":31,"tag":32,"props":1606,"children":1607},{},[1608],{"type":36,"value":1609},"Most guides about the MVP development process describe phases in the abstract. \"Discovery phase. Design phase. Development phase.\" That's not a timeline. That's a table of contents.",{"type":31,"tag":32,"props":1611,"children":1612},{},[1613],{"type":36,"value":1614},"What founders actually want to know:",{"type":31,"tag":243,"props":1616,"children":1617},{},[1618,1623,1628,1633],{"type":31,"tag":247,"props":1619,"children":1620},{},[1621],{"type":36,"value":1622},"When will I see something working?",{"type":31,"tag":247,"props":1624,"children":1625},{},[1626],{"type":36,"value":1627},"What decisions do I need to make, and when?",{"type":31,"tag":247,"props":1629,"children":1630},{},[1631],{"type":36,"value":1632},"What happens when we realize the scope is bigger than we thought?",{"type":31,"tag":247,"props":1634,"children":1635},{},[1636],{"type":36,"value":1637},"What do I get at the end, and what happens next?",{"type":31,"tag":32,"props":1639,"children":1640},{},[1641],{"type":36,"value":1642},"Here's our honest answer to all of those questions.",{"type":31,"tag":80,"props":1644,"children":1646},{"id":1645},"our-8-week-mvp-development-process",[1647],{"type":36,"value":1648},"Our 8-Week MVP Development Process",{"type":31,"tag":32,"props":1650,"children":1651},{},[1652],{"type":36,"value":1653},"This is the process we've refined over years of building MVPs -- for clients and for ourselves. It's not theoretical. It's what we actually do.",{"type":31,"tag":32,"props":1655,"children":1656},{},[1657,1659,1664],{"type":36,"value":1658},"A caveat before we start: 8 weeks assumes proper scoping. The biggest reason MVPs take longer than expected isn't slow development -- it's unclear scope. When you try to build everything, you end up shipping nothing. Scoping is where most projects either succeed or fail, which is why we wrote a whole guide on ",{"type":31,"tag":213,"props":1660,"children":1661},{"href":215},[1662],{"type":36,"value":1663},"how to scope a software project before you spend a dollar",{"type":36,"value":532},{"type":31,"tag":764,"props":1666,"children":1668},{"id":1667},"weeks-1-2-discovery-and-scoping",[1669],{"type":36,"value":1670},"Weeks 1-2: Discovery and Scoping",{"type":31,"tag":32,"props":1672,"children":1673},{},[1674],{"type":36,"value":1675},"This is where we sit down together and figure out what we're actually building. Not the grand vision (that's important, but it comes later). The MVP. The smallest version of your product that proves the idea works.",{"type":31,"tag":32,"props":1677,"children":1678},{},[1679],{"type":31,"tag":60,"props":1680,"children":1681},{},[1682],{"type":36,"value":1683},"What happens:",{"type":31,"tag":243,"props":1685,"children":1686},{},[1687,1692,1697,1702],{"type":31,"tag":247,"props":1688,"children":1689},{},[1690],{"type":36,"value":1691},"We learn your business. Who are your users? What problem are you solving? Why does this matter?",{"type":31,"tag":247,"props":1693,"children":1694},{},[1695],{"type":36,"value":1696},"We map out every feature you want, then cut it in half. Then cut it again.",{"type":31,"tag":247,"props":1698,"children":1699},{},[1700],{"type":36,"value":1701},"We prioritize ruthlessly: must-have vs. nice-to-have vs. future-version.",{"type":31,"tag":247,"props":1703,"children":1704},{},[1705],{"type":36,"value":1706},"We define the technical architecture -- what stack makes sense for your product and your budget.",{"type":31,"tag":32,"props":1708,"children":1709},{},[1710],{"type":31,"tag":60,"props":1711,"children":1712},{},[1713],{"type":36,"value":1714},"What you get:",{"type":31,"tag":243,"props":1716,"children":1717},{},[1718,1723,1728,1733],{"type":31,"tag":247,"props":1719,"children":1720},{},[1721],{"type":36,"value":1722},"A product brief with defined MVP scope",{"type":31,"tag":247,"props":1724,"children":1725},{},[1726],{"type":36,"value":1727},"Technical architecture document",{"type":31,"tag":247,"props":1729,"children":1730},{},[1731],{"type":36,"value":1732},"A realistic timeline with milestones",{"type":31,"tag":247,"props":1734,"children":1735},{},[1736],{"type":31,"tag":213,"props":1737,"children":1738},{"href":301},[1739],{"type":36,"value":1740},"A cost estimate tied to actual scope",{"type":31,"tag":32,"props":1742,"children":1743},{},[1744,1749],{"type":31,"tag":60,"props":1745,"children":1746},{},[1747],{"type":36,"value":1748},"What this feels like as a founder:",{"type":36,"value":1750},"\nThis is the hardest part for most founders. You've been thinking about your product for months, maybe years. Every feature feels essential. But an MVP that tries to do everything does nothing well.",{"type":31,"tag":32,"props":1752,"children":1753},{},[1754],{"type":36,"value":1755},"We'll push back on features. Not because we don't want to build them -- but because we want your MVP to actually ship in 8 weeks, not 8 months. We'll tell you honestly what you need now and what can wait. The features you cut aren't gone. They're in the roadmap for after launch.",{"type":31,"tag":764,"props":1757,"children":1759},{"id":1758},"week-3-design-and-architecture",[1760],{"type":36,"value":1761},"Week 3: Design and Architecture",{"type":31,"tag":32,"props":1763,"children":1764},{},[1765],{"type":36,"value":1766},"With the scope locked, we design the experience and the system behind it.",{"type":31,"tag":32,"props":1768,"children":1769},{},[1770],{"type":31,"tag":60,"props":1771,"children":1772},{},[1773],{"type":36,"value":1683},{"type":31,"tag":243,"props":1775,"children":1776},{},[1777,1782,1787,1792],{"type":31,"tag":247,"props":1778,"children":1779},{},[1780],{"type":36,"value":1781},"Wireframes and UI design for core user flows",{"type":31,"tag":247,"props":1783,"children":1784},{},[1785],{"type":36,"value":1786},"Database design and API architecture",{"type":31,"tag":247,"props":1788,"children":1789},{},[1790],{"type":36,"value":1791},"Stack selection (we're stack-agnostic -- we pick what's right for your product, not what we're comfortable with)",{"type":31,"tag":247,"props":1793,"children":1794},{},[1795],{"type":36,"value":1796},"Development environment setup, CI/CD pipeline configuration",{"type":31,"tag":32,"props":1798,"children":1799},{},[1800],{"type":31,"tag":60,"props":1801,"children":1802},{},[1803],{"type":36,"value":1714},{"type":31,"tag":243,"props":1805,"children":1806},{},[1807,1812,1817],{"type":31,"tag":247,"props":1808,"children":1809},{},[1810],{"type":36,"value":1811},"Clickable prototype you can share with early users or investors",{"type":31,"tag":247,"props":1813,"children":1814},{},[1815],{"type":36,"value":1816},"Architecture diagram showing how the system fits together",{"type":31,"tag":247,"props":1818,"children":1819},{},[1820],{"type":36,"value":1821},"A development environment ready for sprint 1",{"type":31,"tag":32,"props":1823,"children":1824},{},[1825,1830],{"type":31,"tag":60,"props":1826,"children":1827},{},[1828],{"type":36,"value":1829},"Why this week matters:",{"type":36,"value":1831},"\nDecisions made in week 3 affect every week that follows. The stack choice, the database design, the API structure -- these are the foundation. We've seen projects where quick architectural decisions early on cost teams months of rework later.",{"type":31,"tag":32,"props":1833,"children":1834},{},[1835],{"type":36,"value":1836},"When we built Formester, the architecture decisions we made in the first weeks are still supporting the product today. That's the standard we hold ourselves to.",{"type":31,"tag":764,"props":1838,"children":1840},{"id":1839},"weeks-4-5-sprint-1-core-features",[1841],{"type":36,"value":1842},"Weeks 4-5: Sprint 1 (Core Features)",{"type":31,"tag":32,"props":1844,"children":1845},{},[1846],{"type":36,"value":1847},"This is where code starts flowing. We build the foundation -- the core user flows that make your product a product.",{"type":31,"tag":32,"props":1849,"children":1850},{},[1851],{"type":31,"tag":60,"props":1852,"children":1853},{},[1854],{"type":36,"value":1683},{"type":31,"tag":243,"props":1856,"children":1857},{},[1858,1863,1868,1873],{"type":31,"tag":247,"props":1859,"children":1860},{},[1861],{"type":36,"value":1862},"We build the primary user journey end-to-end",{"type":31,"tag":247,"props":1864,"children":1865},{},[1866],{"type":36,"value":1867},"Core features take shape: authentication, data models, primary workflows",{"type":31,"tag":247,"props":1869,"children":1870},{},[1871],{"type":36,"value":1872},"We deploy to a staging environment so you can see progress in real time",{"type":31,"tag":247,"props":1874,"children":1875},{},[1876],{"type":36,"value":1877},"We demo at the end of week 5",{"type":31,"tag":32,"props":1879,"children":1880},{},[1881],{"type":31,"tag":60,"props":1882,"children":1883},{},[1884],{"type":36,"value":1714},{"type":31,"tag":243,"props":1886,"children":1887},{},[1888,1893],{"type":31,"tag":247,"props":1889,"children":1890},{},[1891],{"type":36,"value":1892},"A working build you can click through (not a mockup -- real, functioning software)",{"type":31,"tag":247,"props":1894,"children":1895},{},[1896],{"type":36,"value":1897},"Your first demo: see the product running, test the core flow",{"type":31,"tag":32,"props":1899,"children":1900},{},[1901,1905],{"type":31,"tag":60,"props":1902,"children":1903},{},[1904],{"type":36,"value":1748},{"type":36,"value":1906},"\nHere's the honest part. Weeks 4-5 are when many founders hit a moment of doubt. The product works, but it doesn't look like the vision yet. The UI might feel rough. The flow might feel incomplete. That's normal.",{"type":31,"tag":32,"props":1908,"children":1909},{},[1910],{"type":36,"value":1911},"An MVP at this stage is like a house with the framing up and the plumbing in. It doesn't look like a home yet. But the structure is sound, and everything else builds on top of it. If the demo at week 5 makes you nervous, that's okay. We'll walk through what's coming in the next sprint.",{"type":31,"tag":764,"props":1913,"children":1915},{"id":1914},"weeks-6-7-sprint-2-feature-completion",[1916],{"type":36,"value":1917},"Weeks 6-7: Sprint 2 (Feature Completion)",{"type":31,"tag":32,"props":1919,"children":1920},{},[1921],{"type":36,"value":1922},"The second sprint is where the product starts feeling real.",{"type":31,"tag":32,"props":1924,"children":1925},{},[1926],{"type":31,"tag":60,"props":1927,"children":1928},{},[1929],{"type":36,"value":1683},{"type":31,"tag":243,"props":1931,"children":1932},{},[1933,1938,1943,1948],{"type":31,"tag":247,"props":1934,"children":1935},{},[1936],{"type":36,"value":1937},"Remaining features get built: secondary flows, integrations, edge cases",{"type":31,"tag":247,"props":1939,"children":1940},{},[1941],{"type":36,"value":1942},"We connect third-party services (payment processing, email, analytics)",{"type":31,"tag":247,"props":1944,"children":1945},{},[1946],{"type":36,"value":1947},"Internal testing begins -- our QA process catches bugs before you see them",{"type":31,"tag":247,"props":1949,"children":1950},{},[1951],{"type":36,"value":1952},"UI polish and responsive design",{"type":31,"tag":32,"props":1954,"children":1955},{},[1956],{"type":31,"tag":60,"props":1957,"children":1958},{},[1959],{"type":36,"value":1714},{"type":31,"tag":243,"props":1961,"children":1962},{},[1963,1968,1973],{"type":31,"tag":247,"props":1964,"children":1965},{},[1966],{"type":36,"value":1967},"Feature-complete build with all MVP scope implemented",{"type":31,"tag":247,"props":1969,"children":1970},{},[1971],{"type":36,"value":1972},"Internal QA results with bug fixes underway",{"type":31,"tag":247,"props":1974,"children":1975},{},[1976],{"type":36,"value":1977},"A product that looks and feels like what you imagined",{"type":31,"tag":32,"props":1979,"children":1980},{},[1981,1986],{"type":31,"tag":60,"props":1982,"children":1983},{},[1984],{"type":36,"value":1985},"Key decision point:",{"type":36,"value":1987},"\nSomething always comes up during development that wasn't in the original plan. A feature turns out to be more complex than expected. You discover a user need you hadn't anticipated.",{"type":31,"tag":32,"props":1989,"children":1990},{},[1991],{"type":36,"value":1992},"We'll help you make the call: cut scope to hit 8 weeks, or extend the timeline to include it? There's no wrong answer, but there's always a trade-off. We'll give you the honest assessment so you can decide based on your priorities -- launch date, feature set, or budget.",{"type":31,"tag":764,"props":1994,"children":1996},{"id":1995},"week-8-testing-polish-and-launch",[1997],{"type":36,"value":1998},"Week 8: Testing, Polish, and Launch",{"type":31,"tag":32,"props":2000,"children":2001},{},[2002],{"type":36,"value":2003},"The final push. Everything comes together.",{"type":31,"tag":32,"props":2005,"children":2006},{},[2007],{"type":31,"tag":60,"props":2008,"children":2009},{},[2010],{"type":36,"value":1683},{"type":31,"tag":243,"props":2012,"children":2013},{},[2014,2019,2024,2029,2034],{"type":31,"tag":247,"props":2015,"children":2016},{},[2017],{"type":36,"value":2018},"Final QA pass across devices and browsers",{"type":31,"tag":247,"props":2020,"children":2021},{},[2022],{"type":36,"value":2023},"Bug fixes and performance optimization",{"type":31,"tag":247,"props":2025,"children":2026},{},[2027],{"type":36,"value":2028},"Production deployment setup (cloud infrastructure, monitoring, backups)",{"type":31,"tag":247,"props":2030,"children":2031},{},[2032],{"type":36,"value":2033},"Documentation: deployment process, architecture overview, codebase guide",{"type":31,"tag":247,"props":2035,"children":2036},{},[2037],{"type":36,"value":2038},"Launch",{"type":31,"tag":32,"props":2040,"children":2041},{},[2042],{"type":31,"tag":60,"props":2043,"children":2044},{},[2045],{"type":36,"value":1714},{"type":31,"tag":243,"props":2047,"children":2048},{},[2049,2054,2059,2064],{"type":31,"tag":247,"props":2050,"children":2051},{},[2052],{"type":36,"value":2053},"Production-ready MVP deployed and live",{"type":31,"tag":247,"props":2055,"children":2056},{},[2057],{"type":36,"value":2058},"CI/CD pipeline (updates ship with a single command)",{"type":31,"tag":247,"props":2060,"children":2061},{},[2062],{"type":36,"value":2063},"Technical documentation for your codebase",{"type":31,"tag":247,"props":2065,"children":2066},{},[2067],{"type":36,"value":2068},"Post-launch support for the first 2 weeks",{"type":31,"tag":32,"props":2070,"children":2071},{},[2072,2077],{"type":31,"tag":60,"props":2073,"children":2074},{},[2075],{"type":36,"value":2076},"What launch day feels like:",{"type":36,"value":2078},"\nThere's a mix of excitement and anxiety on launch day. That's normal too. The first real users will find things you didn't expect. That's not a failure of the process -- that's the point of an MVP. You're learning what works and what doesn't, with real data instead of assumptions.",{"type":31,"tag":80,"props":2080,"children":2082},{"id":2081},"what-happens-after-week-8",[2083],{"type":36,"value":2084},"What Happens After Week 8",{"type":31,"tag":32,"props":2086,"children":2087},{},[2088],{"type":36,"value":2089},"This is where most guides end. And this is where most agencies disappear.",{"type":31,"tag":32,"props":2091,"children":2092},{},[2093],{"type":36,"value":2094},"The post-launch period is actually the most important phase of your product's life. You have real users now. They're finding bugs you didn't catch. They're using features in ways you didn't anticipate. They're telling you -- through behavior, not words -- what matters and what doesn't.",{"type":31,"tag":32,"props":2096,"children":2097},{},[2098],{"type":36,"value":2099},"This is the moment you need your engineering team the most.",{"type":31,"tag":32,"props":2101,"children":2102},{},[2103],{"type":36,"value":2104},"We stay.",{"type":31,"tag":32,"props":2106,"children":2107},{},[2108],{"type":36,"value":2109},"We shipped a demoable product for Eitoss in 8 weeks and a production-ready version in 3 months. They used it to raise funding. That was over 2 years ago. We're still building together.",{"type":31,"tag":32,"props":2111,"children":2112},{},[2113],{"type":36,"value":2114},"That's not an exception. That's how we work. PerformLine started with 1 engineer from our team. Two years later, we're 8+ engineers deep. They didn't plan for that at the start. The partnership grew because the work was good and the trust was real.",{"type":31,"tag":32,"props":2116,"children":2117},{},[2118],{"type":36,"value":2119},"We don't see the MVP launch as the finish line. We see it as the starting line. The first version of your product is never the best version. What matters is whether the team that built it is still there to make it better.",{"type":31,"tag":80,"props":2121,"children":2123},{"id":2122},"how-to-set-your-mvp-up-for-success",[2124],{"type":36,"value":2125},"How to Set Your MVP Up for Success",{"type":31,"tag":32,"props":2127,"children":2128},{},[2129],{"type":36,"value":2130},"Before you start the 8-week clock, here's what makes the difference between an MVP that gains traction and one that collects dust.",{"type":31,"tag":32,"props":2132,"children":2133},{},[2134,2139,2141,2146],{"type":31,"tag":60,"props":2135,"children":2136},{},[2137],{"type":36,"value":2138},"Validate before you build.",{"type":36,"value":2140}," Talk to potential users. Build a waitlist. Test the idea with a landing page. The best MVP development process in the world can't save a product nobody wants. ",{"type":31,"tag":213,"props":2142,"children":2143},{"href":301},[2144],{"type":36,"value":2145},"The cost of building an MVP",{"type":36,"value":2147}," is significant -- make sure you're solving a real problem first.",{"type":31,"tag":32,"props":2149,"children":2150},{},[2151,2156],{"type":31,"tag":60,"props":2152,"children":2153},{},[2154],{"type":36,"value":2155},"Be honest about your budget and timeline.",{"type":36,"value":2157}," If you have 12 weeks of runway and need an MVP in 8, that's tight but doable. If you have 6 weeks of runway, we need to have a different conversation. We'll always give you an honest assessment.",{"type":31,"tag":32,"props":2159,"children":2160},{},[2161,2166],{"type":31,"tag":60,"props":2162,"children":2163},{},[2164],{"type":36,"value":2165},"Choose a partner who will tell you \"no.\"",{"type":36,"value":2167}," If every agency you talk to says \"yes, we can do that\" to every feature and every timeline, be suspicious. A good partner pushes back because they care about the outcome, not just the deal.",{"type":31,"tag":32,"props":2169,"children":2170},{},[2171,2176,2178,2183],{"type":31,"tag":60,"props":2172,"children":2173},{},[2174],{"type":36,"value":2175},"Plan for what comes after launch.",{"type":36,"value":2177}," Your MVP is the beginning, not the end. Budget for iteration. Plan for user feedback loops. ",{"type":31,"tag":213,"props":2179,"children":2180},{"href":1519},[2181],{"type":36,"value":2182},"Think about your team structure",{"type":36,"value":2184}," beyond launch day.",{"type":31,"tag":80,"props":2186,"children":2188},{"id":2187},"what-this-process-is-not",[2189],{"type":36,"value":2190},"What This Process Is Not",{"type":31,"tag":32,"props":2192,"children":2193},{},[2194,2199],{"type":31,"tag":60,"props":2195,"children":2196},{},[2197],{"type":36,"value":2198},"Not a throwaway prototype.",{"type":36,"value":2200}," Everything we build in 8 weeks is production-quality. Clean code, tested, documented, deployed. You're not throwing this away and rebuilding -- you're iterating on a solid foundation.",{"type":31,"tag":32,"props":2202,"children":2203},{},[2204,2209],{"type":31,"tag":60,"props":2205,"children":2206},{},[2207],{"type":36,"value":2208},"Not a waterfall project.",{"type":36,"value":2210}," You see working software every 2 weeks. You give feedback. We adjust. It's a conversation, not a handoff.",{"type":31,"tag":32,"props":2212,"children":2213},{},[2214,2219],{"type":31,"tag":60,"props":2215,"children":2216},{},[2217],{"type":36,"value":2218},"Not a transaction.",{"type":36,"value":2220}," The 8-week process is how we start a partnership. The best client relationships we have started with an MVP. What happened next -- the growth, the scaling, the product evolution -- that's the real story.",{"type":31,"tag":80,"props":2222,"children":2224},{"id":2223},"ready-to-talk-about-your-mvp",[2225],{"type":36,"value":2226},"Ready to Talk About Your MVP?",{"type":31,"tag":32,"props":2228,"children":2229},{},[2230,2232,2237],{"type":36,"value":2231},"If you have a product idea and you're wondering what 8 weeks could look like for you, we're happy to talk it through. We'll give you an honest assessment of scope, timeline, and ",{"type":31,"tag":213,"props":2233,"children":2234},{"href":301},[2235],{"type":36,"value":2236},"what it might cost",{"type":36,"value":2238}," -- no commitment, no pressure.",{"type":31,"tag":32,"props":2240,"children":2241},{},[2242],{"type":36,"value":2243},"The first step is always a conversation. And if we're not the right fit, we'll tell you that too.",{"title":7,"searchDepth":564,"depth":564,"links":2245},[2246,2247,2254,2255,2256,2257],{"id":1601,"depth":564,"text":1604},{"id":1645,"depth":564,"text":1648,"children":2248},[2249,2250,2251,2252,2253],{"id":1667,"depth":1536,"text":1670},{"id":1758,"depth":1536,"text":1761},{"id":1839,"depth":1536,"text":1842},{"id":1914,"depth":1536,"text":1917},{"id":1995,"depth":1536,"text":1998},{"id":2081,"depth":564,"text":2084},{"id":2122,"depth":564,"text":2125},{"id":2187,"depth":564,"text":2190},{"id":2223,"depth":564,"text":2226},"content:blog:mvp-development-process.md","blog/mvp-development-process.md","blog/mvp-development-process",[2262,2849,3361,4105],{"_path":2263,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2264,"description":2265,"topic":2266,"author":11,"authorProfile":12,"coverImg":2267,"coverImgAlt":2268,"published":15,"toc":15,"readingTime":2269,"createdAt":2270,"updatedAt":2270,"keywords":2271,"body":2280,"_type":575,"_id":2846,"_source":577,"_file":2847,"_stem":2848,"_extension":580},"/blog/avoiding-vendor-lock-in","Avoiding Vendor Lock-In: Owning Your Code, Docs, and Roadmap","By default, you may not even own the code you paid for. Here's how to avoid vendor lock-in from day one — IP clauses, open standards, data portability, and roadmap control.","Code Ownership","/images/blog/avoiding-vendor-lock-in.webp","Avoiding vendor lock-in — owning your code, docs, and roadmap from day one","13 min read","2026-06-10",[2272,2273,2274,2275,2276,2277,2278,2279],"how to avoid vendor lock-in software development","who owns the code agency develops","do I own the code my developer writes","software development IP ownership clause","code ownership software development contract","intellectual property software development agreement","data portability software vendor","no lock-in software development partner",{"type":28,"children":2281,"toc":2832},[2282,2287,2299,2318,2323,2350,2356,2361,2367,2372,2378,2390,2396,2408,2413,2419,2424,2436,2441,2477,2482,2488,2493,2503,2520,2530,2543,2549,2554,2570,2586,2598,2604,2609,2621,2645,2651,2656,2727,2732,2738,2750,2763,2769,2774,2798,2801,2809],{"type":31,"tag":32,"props":2283,"children":2284},{},[2285],{"type":36,"value":2286},"Here's a fact that surprises almost every founder we tell it to: you might not own the code you paid for.",{"type":31,"tag":32,"props":2288,"children":2289},{},[2290,2292,2297],{"type":36,"value":2291},"Under US copyright law, when you hire an outside developer to write software, ",{"type":31,"tag":44,"props":2293,"children":2294},{},[2295],{"type":36,"value":2296},"the developer",{"type":36,"value":2298}," owns the copyright by default — unless a written agreement says otherwise. You can pay every invoice in full and still not hold the rights to the thing you funded. That's not a scam anyone has to run; it's just what the law says when the contract is silent. Most founders find this out at exactly the wrong moment: when they want to switch teams, raise a round, or get acquired, and a lawyer asks for the IP assignment that was never signed.",{"type":31,"tag":32,"props":2300,"children":2301},{},[2302,2304,2309,2311,2316],{"type":36,"value":2303},"And ownership of the code is only the first kind of dependency. Lock-in is also ",{"type":31,"tag":44,"props":2305,"children":2306},{},[2307],{"type":36,"value":2308},"technical",{"type":36,"value":2310}," — built on a platform you can't leave — and ",{"type":31,"tag":44,"props":2312,"children":2313},{},[2314],{"type":36,"value":2315},"operational",{"type":36,"value":2317}," — code only the original team understands, with a roadmap the vendor effectively controls. The good news is that all three are preventable, and none of it requires distrusting the team you're about to work with. It just requires setting the relationship up right from day one.",{"type":31,"tag":32,"props":2319,"children":2320},{},[2321],{"type":36,"value":2322},"A quick note before we go further: this is general guidance, not legal advice. The specific clauses below are worth understanding so you know what to ask for, but have your own counsel review any contract — especially the IP terms — before you sign.",{"type":31,"tag":32,"props":2324,"children":2325},{},[2326,2328,2333,2335,2341,2343,2348],{"type":36,"value":2327},"This post is the ",{"type":31,"tag":44,"props":2329,"children":2330},{},[2331],{"type":36,"value":2332},"preventative",{"type":36,"value":2334}," side of staying free — how to structure the relationship so you're never locked in. Its sibling, ",{"type":31,"tag":213,"props":2336,"children":2338},{"href":2337},"/blog/agency-code-handoff-ready/",[2339],{"type":36,"value":2340},"is your agency's code handoff-ready?",{"type":36,"value":2342},", is the ",{"type":31,"tag":44,"props":2344,"children":2345},{},[2346],{"type":36,"value":2347},"diagnostic",{"type":36,"value":2349}," side: how to evaluate code a team is already writing. Read both.",{"type":31,"tag":80,"props":2351,"children":2353},{"id":2352},"the-three-kinds-of-lock-in",[2354],{"type":36,"value":2355},"The Three Kinds of Lock-In",{"type":31,"tag":32,"props":2357,"children":2358},{},[2359],{"type":36,"value":2360},"Lock-in isn't one problem. It's three, and most guides only talk about one of them. You need to guard against all three.",{"type":31,"tag":764,"props":2362,"children":2364},{"id":2363},"contractual-lock-in",[2365],{"type":36,"value":2366},"Contractual lock-in",{"type":31,"tag":32,"props":2368,"children":2369},{},[2370],{"type":36,"value":2371},"You don't legally own the code, the IP assignment is missing or vague, or the license restricts what you can do with your own product. This is the most dangerous kind precisely because it's invisible — everything feels fine until you try to leave, raise, or sell, and discover the rights aren't yours.",{"type":31,"tag":764,"props":2373,"children":2375},{"id":2374},"technical-lock-in",[2376],{"type":36,"value":2377},"Technical lock-in",{"type":31,"tag":32,"props":2379,"children":2380},{},[2381,2383,2388],{"type":36,"value":2382},"The product is built on something you can't walk away from: a proprietary framework only this vendor knows, a low-code or no-code platform where you own a ",{"type":31,"tag":44,"props":2384,"children":2385},{},[2386],{"type":36,"value":2387},"configuration",{"type":36,"value":2389}," rather than source code, a closed database, or data you can't export in any usable form. Technically you have a product. Practically, you can't take it anywhere.",{"type":31,"tag":764,"props":2391,"children":2393},{"id":2392},"operational-lock-in",[2394],{"type":36,"value":2395},"Operational lock-in",{"type":31,"tag":32,"props":2397,"children":2398},{},[2399,2401,2406],{"type":36,"value":2400},"The code works, but it's undocumented, and only the people who wrote it understand it. Worse, the ",{"type":31,"tag":44,"props":2402,"children":2403},{},[2404],{"type":36,"value":2405},"roadmap",{"type":36,"value":2407}," sits with the vendor — they decide what gets built next, and you discover you can't make a move without them. You own the asset on paper and depend on them completely in practice.",{"type":31,"tag":32,"props":2409,"children":2410},{},[2411],{"type":36,"value":2412},"The rest of this post walks through how to prevent each one — contract first, because it's the one most founders never see coming.",{"type":31,"tag":80,"props":2414,"children":2416},{"id":2415},"contract-own-the-ip-from-day-one",[2417],{"type":36,"value":2418},"Contract: Own the IP From Day One",{"type":31,"tag":32,"props":2420,"children":2421},{},[2422],{"type":36,"value":2423},"The fix for contractual lock-in is a single clause, and you should insist on it before any code gets written.",{"type":31,"tag":32,"props":2425,"children":2426},{},[2427,2429,2434],{"type":36,"value":2428},"You want a clear ",{"type":31,"tag":60,"props":2430,"children":2431},{},[2432],{"type":36,"value":2433},"IP-assignment / work-for-hire provision",{"type":36,"value":2435}," that says, in plain terms: all intellectual property created in this engagement is assigned to you, the client, on creation. Not on final payment, not on request — on creation. That one sentence is the difference between funding software and owning it. (Again: general guidance, not legal advice — have counsel draft and review the exact wording.)",{"type":31,"tag":32,"props":2437,"children":2438},{},[2439],{"type":36,"value":2440},"Two more things to check while you're in the contract:",{"type":31,"tag":243,"props":2442,"children":2443},{},[2444,2454],{"type":31,"tag":247,"props":2445,"children":2446},{},[2447,2452],{"type":31,"tag":60,"props":2448,"children":2449},{},[2450],{"type":36,"value":2451},"Third-party and open-source components.",{"type":36,"value":2453}," Modern software is built on libraries. Make sure nothing your team brings in carries a license that restricts how you use, distribute, or sell your product. A good partner tracks this and can hand you the list.",{"type":31,"tag":247,"props":2455,"children":2456},{},[2457,2462,2464,2469,2471,2475],{"type":31,"tag":60,"props":2458,"children":2459},{},[2460],{"type":36,"value":2461},"Repositories and accounts in your name.",{"type":36,"value":2463}," The code should live in ",{"type":31,"tag":44,"props":2465,"children":2466},{},[2467],{"type":36,"value":2468},"your",{"type":36,"value":2470}," version control, on ",{"type":31,"tag":44,"props":2472,"children":2473},{},[2474],{"type":36,"value":2468},{"type":36,"value":2476}," cloud accounts, from the start — not in the vendor's, with you as a guest.",{"type":31,"tag":32,"props":2478,"children":2479},{},[2480],{"type":36,"value":2481},"And here's the honest tell: a partner who builds to hand over has no reason to resist any of this. Assigning you the IP, working in your repos, listing the licenses — none of it costs them anything if their plan was always for you to own what you paid for. Resistance to a clean IP clause is one of the clearest red flags there is. Ask early, and watch the reaction.",{"type":31,"tag":80,"props":2483,"children":2485},{"id":2484},"technology-build-on-things-you-can-leave",[2486],{"type":36,"value":2487},"Technology: Build on Things You Can Leave",{"type":31,"tag":32,"props":2489,"children":2490},{},[2491],{"type":36,"value":2492},"Technical lock-in is prevented at the architecture stage, by choosing tools you could walk away from if you ever had to.",{"type":31,"tag":32,"props":2494,"children":2495},{},[2496,2501],{"type":31,"tag":60,"props":2497,"children":2498},{},[2499],{"type":36,"value":2500},"Favor open standards over proprietary ones.",{"type":36,"value":2502}," REST and HTTP for APIs, PostgreSQL for data, standard token-based authentication like JWT — these are common, well-understood, and supported everywhere. The practical benefit is simple: if you ever need to bring in a new team, you can find people who know these tools tomorrow. A proprietary framework that only your current vendor understands does the opposite — it quietly makes them irreplaceable.",{"type":31,"tag":32,"props":2504,"children":2505},{},[2506,2511,2513,2518],{"type":31,"tag":60,"props":2507,"children":2508},{},[2509],{"type":36,"value":2510},"Understand the low-code / no-code trade-off.",{"type":36,"value":2512}," Platforms like Bubble, OutSystems, and the like are genuinely fast to start with, and for the right use case they're a smart choice. But be clear-eyed about what you're getting: on most of them, you own a ",{"type":31,"tag":44,"props":2514,"children":2515},{},[2516],{"type":36,"value":2517},"configuration inside someone else's system",{"type":36,"value":2519},", not source code you can take elsewhere. If the platform raises its prices, changes its terms, or shuts down, your options are limited and migration can mean rebuilding from scratch. That's a fine trade when speed matters most and the platform fits — just make the trade knowingly, not by accident, and know what leaving would cost.",{"type":31,"tag":32,"props":2521,"children":2522},{},[2523,2528],{"type":31,"tag":60,"props":2524,"children":2525},{},[2526],{"type":36,"value":2527},"Confirm data portability up front.",{"type":36,"value":2529}," Ask directly: can I export everything — my data, in a usable, standard format — anytime I want? If the answer is anything other than a clean yes, you're partly locked in already. Your data is yours; the ability to take it with you is non-negotiable.",{"type":31,"tag":32,"props":2531,"children":2532},{},[2533,2535,2541],{"type":36,"value":2534},"This is also why we're ",{"type":31,"tag":213,"props":2536,"children":2538},{"href":2537},"/services/full-project-delivery/",[2539],{"type":36,"value":2540},"stack-agnostic",{"type":36,"value":2542},". We pick the right tool for your problem, not the one that happens to tie you to us. The right tool is, almost always, one you could keep without us.",{"type":31,"tag":80,"props":2544,"children":2546},{"id":2545},"operations-documentation-and-roadmap-ownership",[2547],{"type":36,"value":2548},"Operations: Documentation and Roadmap Ownership",{"type":31,"tag":32,"props":2550,"children":2551},{},[2552],{"type":36,"value":2553},"The last kind of lock-in is the quietest, because the code works — right up until the day you need someone other than the original team to touch it.",{"type":31,"tag":32,"props":2555,"children":2556},{},[2557,2562,2564,2568],{"type":31,"tag":60,"props":2558,"children":2559},{},[2560],{"type":36,"value":2561},"Documentation is the antidote to people-dependency.",{"type":36,"value":2563}," Code should be written and documented so any competent developer can pick it up — clean structure, a real README, sensible tests, containerized setup. We won't re-list the full code-side checklist here, because our sibling post already does: ",{"type":31,"tag":213,"props":2565,"children":2566},{"href":2337},[2567],{"type":36,"value":2340},{"type":36,"value":2569}," walks through exactly what to look for. Read it alongside this one — that post is how you check the code, this post is how you structure the relationship around it.",{"type":31,"tag":32,"props":2571,"children":2572},{},[2573,2578,2579,2584],{"type":31,"tag":60,"props":2574,"children":2575},{},[2576],{"type":36,"value":2577},"Roadmap ownership is the angle almost nobody talks about.",{"type":36,"value":484},{"type":31,"tag":44,"props":2580,"children":2581},{},[2582],{"type":36,"value":2583},"You",{"type":36,"value":2585}," decide what gets built next — not the vendor. A good partner advises, pushes back, and brings options to the table; but the direction is yours. Watch for the subtle inversion where a vendor's preferences quietly become your roadmap because they're the only ones who understand the system well enough to weigh in. That's operational lock-in wearing a friendly face. The cure is the documentation above plus an explicit understanding: they advise, you decide.",{"type":31,"tag":32,"props":2587,"children":2588},{},[2589,2591,2596],{"type":36,"value":2590},"And \"built to hand over\" cuts all the way through. It means that if you ever wanted to bring the product fully in-house, a good partner would ",{"type":31,"tag":44,"props":2592,"children":2593},{},[2594],{"type":36,"value":2595},"help",{"type":36,"value":2597}," you do it — not stonewall. That isn't a threat to a healthy partnership; it's a feature of one. The freedom to leave is exactly what makes staying a real choice instead of a trap.",{"type":31,"tag":80,"props":2599,"children":2601},{"id":2600},"when-lock-in-is-engineered-on-purpose",[2602],{"type":36,"value":2603},"When Lock-In Is Engineered on Purpose",{"type":31,"tag":32,"props":2605,"children":2606},{},[2607],{"type":36,"value":2608},"Let's name the uncomfortable version honestly. Not all lock-in is accidental. Some of it is designed: proprietary frameworks chosen specifically because they're hard to leave, code left deliberately undocumented, an offboarding plan that doesn't exist because there was never meant to be one. When dependency is the business model, every protection above gets quiet resistance.",{"type":31,"tag":32,"props":2610,"children":2611},{},[2612,2614,2619],{"type":36,"value":2613},"We won't tell you that's how everyone operates — it isn't, and we don't talk about other teams that way. We'll just tell you how ",{"type":31,"tag":44,"props":2615,"children":2616},{},[2617],{"type":36,"value":2618},"we",{"type":36,"value":2620}," think about it, and why.",{"type":31,"tag":32,"props":2622,"children":2623},{},[2624,2626,2630,2632,2636,2638,2643],{"type":36,"value":2625},"We built ",{"type":31,"tag":213,"props":2627,"children":2628},{"href":456},[2629],{"type":36,"value":459},{"type":36,"value":2631},", our own SaaS product. Owning something end to end — the code, the data, the roadmap, the consequences — taught us what real ownership feels like, and how much it matters to actually hold it. That's why we build ",{"type":31,"tag":44,"props":2633,"children":2634},{},[2635],{"type":36,"value":2468},{"type":36,"value":2637}," product to be owned by ",{"type":31,"tag":44,"props":2639,"children":2640},{},[2641],{"type":36,"value":2642},"you",{"type":36,"value":2644},". Clean code, full documentation, your repos, your IP, zero lock-in. Not because a clause forces us to, but because we know what it's like to want to own the thing you've poured yourself into.",{"type":31,"tag":80,"props":2646,"children":2648},{"id":2647},"your-day-one-anti-lock-in-checklist",[2649],{"type":36,"value":2650},"Your Day-One Anti-Lock-In Checklist",{"type":31,"tag":32,"props":2652,"children":2653},{},[2654],{"type":36,"value":2655},"Bring this to the kickoff, not the breakup:",{"type":31,"tag":2657,"props":2658,"children":2659},"ol",{},[2660,2670,2680,2690,2707,2717],{"type":31,"tag":247,"props":2661,"children":2662},{},[2663,2668],{"type":31,"tag":60,"props":2664,"children":2665},{},[2666],{"type":36,"value":2667},"IP-assignment clause signed",{"type":36,"value":2669}," — all IP assigned to you on creation. (Counsel reviews it.)",{"type":31,"tag":247,"props":2671,"children":2672},{},[2673,2678],{"type":31,"tag":60,"props":2674,"children":2675},{},[2676],{"type":36,"value":2677},"Open standards chosen",{"type":36,"value":2679}," — REST, PostgreSQL, standard auth; tools you could find help for tomorrow.",{"type":31,"tag":247,"props":2681,"children":2682},{},[2683,2688],{"type":31,"tag":60,"props":2684,"children":2685},{},[2686],{"type":36,"value":2687},"Data export confirmed",{"type":36,"value":2689}," — everything exportable in a usable format, anytime.",{"type":31,"tag":247,"props":2691,"children":2692},{},[2693,2698,2700,2705],{"type":31,"tag":60,"props":2694,"children":2695},{},[2696],{"type":36,"value":2697},"Documentation from day one",{"type":36,"value":2699}," — not promised \"at the end.\" (See the ",{"type":31,"tag":213,"props":2701,"children":2702},{"href":2337},[2703],{"type":36,"value":2704},"handoff-ready checklist",{"type":36,"value":2706},".)",{"type":31,"tag":247,"props":2708,"children":2709},{},[2710,2715],{"type":31,"tag":60,"props":2711,"children":2712},{},[2713],{"type":36,"value":2714},"Roadmap owned by you",{"type":36,"value":2716}," — they advise, you decide.",{"type":31,"tag":247,"props":2718,"children":2719},{},[2720,2725],{"type":31,"tag":60,"props":2721,"children":2722},{},[2723],{"type":36,"value":2724},"Code in your repos and accounts",{"type":36,"value":2726}," — yours from the first commit, not the vendor's.",{"type":31,"tag":32,"props":2728,"children":2729},{},[2730],{"type":36,"value":2731},"Six lines. Run them before you sign, and most of the lock-in horror stories simply can't happen to you.",{"type":31,"tag":80,"props":2733,"children":2735},{"id":2734},"avoiding-lock-in-and-choosing-a-partner-who-stays-are-the-same-value",[2736],{"type":36,"value":2737},"Avoiding Lock-In and Choosing a Partner Who Stays Are the Same Value",{"type":31,"tag":32,"props":2739,"children":2740},{},[2741,2743,2748],{"type":36,"value":2742},"Here's the thing that ties this whole post to its sibling. A partner who builds for your freedom — who hands you the IP, documents everything, and leaves the door open — is the same kind of partner who ",{"type":31,"tag":44,"props":2744,"children":2745},{},[2746],{"type":36,"value":2747},"stays",{"type":36,"value":2749},". Not because you're locked in, but because the work is honest and worth keeping. Lock-in-free and long-term aren't opposites. They're two expressions of the same priority: your success over their leverage.",{"type":31,"tag":32,"props":2751,"children":2752},{},[2753,2755,2761],{"type":36,"value":2754},"If you're choosing a team for a long build, read the companion to this post: ",{"type":31,"tag":213,"props":2756,"children":2758},{"href":2757},"/blog/choosing-engineering-partner/",[2759],{"type":36,"value":2760},"how to choose an engineering partner who'll still be here in two years",{"type":36,"value":2762},". The partner who'll let you leave freely is, more often than not, the one you'll never want to.",{"type":31,"tag":80,"props":2764,"children":2766},{"id":2765},"want-a-partner-who-builds-for-your-independence",[2767],{"type":36,"value":2768},"Want a Partner Who Builds for Your Independence?",{"type":31,"tag":32,"props":2770,"children":2771},{},[2772],{"type":36,"value":2773},"Your code, your repos, your roadmap — from day one. Ask us how we structure ownership and handover, with no commitment. If you ever want to bring it in-house, we'll help you do that too. That's what \"built to hand over\" actually means.",{"type":31,"tag":32,"props":2775,"children":2776},{},[2777,2782,2784,2789,2791,2797],{"type":31,"tag":213,"props":2778,"children":2779},{"href":519},[2780],{"type":36,"value":2781},"Talk to us",{"type":36,"value":2783},", or see how we approach ",{"type":31,"tag":213,"props":2785,"children":2786},{"href":2537},[2787],{"type":36,"value":2788},"full project delivery",{"type":36,"value":2790}," and ",{"type":31,"tag":213,"props":2792,"children":2794},{"href":2793},"/services/maintenance-support/",[2795],{"type":36,"value":2796},"ongoing maintenance without lock-in",{"type":36,"value":532},{"type":31,"tag":534,"props":2799,"children":2800},{},[],{"type":31,"tag":32,"props":2802,"children":2803},{},[2804],{"type":31,"tag":44,"props":2805,"children":2806},{},[2807],{"type":36,"value":2808},"This article is general guidance, not legal advice. Have qualified counsel review any contract — particularly IP-assignment clauses — before signing.",{"type":31,"tag":32,"props":2810,"children":2811},{},[2812],{"type":31,"tag":44,"props":2813,"children":2814},{},[2815,2816,2821,2822,2827,2828],{"type":36,"value":544},{"type":31,"tag":213,"props":2817,"children":2818},{"href":2337},[2819],{"type":36,"value":2820},"Is Your Agency's Code Handoff-Ready?",{"type":36,"value":551},{"type":31,"tag":213,"props":2823,"children":2824},{"href":2757},[2825],{"type":36,"value":2826},"How to Choose an Engineering Partner Who'll Still Be Here in 2 Years",{"type":36,"value":551},{"type":31,"tag":213,"props":2829,"children":2830},{"href":456},[2831],{"type":36,"value":562},{"title":7,"searchDepth":564,"depth":564,"links":2833},[2834,2839,2840,2841,2842,2843,2844,2845],{"id":2352,"depth":564,"text":2355,"children":2835},[2836,2837,2838],{"id":2363,"depth":1536,"text":2366},{"id":2374,"depth":1536,"text":2377},{"id":2392,"depth":1536,"text":2395},{"id":2415,"depth":564,"text":2418},{"id":2484,"depth":564,"text":2487},{"id":2545,"depth":564,"text":2548},{"id":2600,"depth":564,"text":2603},{"id":2647,"depth":564,"text":2650},{"id":2734,"depth":564,"text":2737},{"id":2765,"depth":564,"text":2768},"content:blog:avoiding-vendor-lock-in.md","blog/avoiding-vendor-lock-in.md","blog/avoiding-vendor-lock-in",{"_path":2850,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2826,"description":2851,"topic":2852,"author":11,"authorProfile":12,"coverImg":2853,"coverImgAlt":2854,"published":15,"toc":15,"readingTime":16,"createdAt":2855,"updatedAt":2855,"keywords":2856,"body":2866,"_type":575,"_id":3358,"_source":577,"_file":3359,"_stem":3360,"_extension":580},"/blog/choosing-engineering-partner","The agency that ships and disappears is the most expensive mistake you can make. Here's how to choose an engineering partner who'll still be here in 2 years.","Choosing a Partner","/images/blog/choosing-engineering-partner.webp","How to choose an engineering partner who'll still be here in two years","2026-06-01",[2857,2858,2859,2860,2861,2862,2863,2864,2865],"how to choose a software development partner","how to choose a long term software development partner","questions to ask a software development agency","how to vet a software development agency","reliable software development partner","software development partner red flags","software agency that stays after launch","choosing a development partner for a startup","long term technology partner",{"type":28,"children":2867,"toc":3342},[2868,2873,2878,2890,2917,2923,2928,2933,2943,2949,2954,2960,2971,2977,2982,2988,2993,2999,3004,3010,3015,3021,3026,3085,3090,3096,3108,3113,3125,3131,3136,3152,3166,3177,3183,3188,3193,3198,3204,3228,3248,3282,3288,3293,3315,3318],{"type":31,"tag":32,"props":2869,"children":2870},{},[2871],{"type":36,"value":2872},"The most expensive engineering hire you can make isn't the one who charges the most. It's the one who disappears.",{"type":31,"tag":32,"props":2874,"children":2875},{},[2876],{"type":36,"value":2877},"You know the story, or you've heard it from a founder who lived it. The agency pitches well, ships something on launch day, collects the final invoice, and quietly moves on. Six months later you're sitting on a half-finished product, a roadmap nobody owns, and a codebase only the people who left fully understand. Now you're not just behind — you're paying someone new to reverse-engineer the last team's work before they can write a single new line.",{"type":31,"tag":32,"props":2879,"children":2880},{},[2881,2883,2888],{"type":36,"value":2882},"When you're betting your product on a multi-year build, skill isn't enough to screen for. You have to screen for ",{"type":31,"tag":44,"props":2884,"children":2885},{},[2886],{"type":36,"value":2887},"staying power",{"type":36,"value":2889},". The fear is rational, so let's make it actionable: here's how to tell, before you sign, whether a partner will still be here when your roadmap is on its third revision.",{"type":31,"tag":32,"props":2891,"children":2892},{},[2893,2895,2900,2902,2908,2910,2915],{"type":36,"value":2894},"If you haven't yet decided ",{"type":31,"tag":44,"props":2896,"children":2897},{},[2898],{"type":36,"value":2899},"how",{"type":36,"value":2901}," you want to engage a partner — dedicated team, project-based, or augmentation — start with ",{"type":31,"tag":213,"props":2903,"children":2905},{"href":2904},"/blog/engagement-models/",[2906],{"type":36,"value":2907},"which engagement model fits you",{"type":36,"value":2909},". This post is about choosing the ",{"type":31,"tag":44,"props":2911,"children":2912},{},[2913],{"type":36,"value":2914},"who",{"type":36,"value":2916},", once you know the structure.",{"type":31,"tag":80,"props":2918,"children":2920},{"id":2919},"the-most-expensive-hire-is-the-one-who-disappears",[2921],{"type":36,"value":2922},"The Most Expensive Hire Is the One Who Disappears",{"type":31,"tag":32,"props":2924,"children":2925},{},[2926],{"type":36,"value":2927},"A short build can survive a partner who leaves. A long one can't. The further out your roadmap stretches, the more the relationship itself becomes the asset — and the more a partner's exit costs you.",{"type":31,"tag":32,"props":2929,"children":2930},{},[2931],{"type":36,"value":2932},"Think about what actually leaves when a team walks away. Not just the people. The context. The reasons behind a hundred small decisions in your codebase. The undocumented \"we did it this way because\" that no README captures. A new team can relearn it, but you'll pay for the relearning in both money and momentum — and momentum is the thing early products can least afford to lose.",{"type":31,"tag":32,"props":2934,"children":2935},{},[2936,2938],{"type":36,"value":2937},"So before you compare rates or portfolios, ask the question that actually predicts the outcome: ",{"type":31,"tag":44,"props":2939,"children":2940},{},[2941],{"type":36,"value":2942},"will these people still be here in two years?",{"type":31,"tag":80,"props":2944,"children":2946},{"id":2945},"_5-signs-a-partner-will-ghost-you-after-launch",[2947],{"type":36,"value":2948},"5 Signs a Partner Will Ghost You After Launch",{"type":31,"tag":32,"props":2950,"children":2951},{},[2952],{"type":36,"value":2953},"You can spot the disappearing kind early, if you know the tells. None of these is damning on its own, but together they paint a clear picture.",{"type":31,"tag":764,"props":2955,"children":2957},{"id":2956},"every-conversation-is-about-the-launch-date",[2958],{"type":36,"value":2959},"Every conversation is about the launch date",{"type":31,"tag":32,"props":2961,"children":2962},{},[2963,2965,2969],{"type":36,"value":2964},"If all the energy is on shipping day and nobody's talking about month two or year two, that tells you where their attention ends. A partner who plans to stay talks naturally about what happens ",{"type":31,"tag":44,"props":2966,"children":2967},{},[2968],{"type":36,"value":204},{"type":36,"value":2970}," launch — because for them, launch is the start of the relationship, not the finish line.",{"type":31,"tag":764,"props":2972,"children":2974},{"id":2973},"theres-no-post-launch-support-in-the-pricing",[2975],{"type":36,"value":2976},"There's no post-launch support in the pricing",{"type":31,"tag":32,"props":2978,"children":2979},{},[2980],{"type":36,"value":2981},"Look at the proposal. If \"build\" is a single line item and there's nothing about what happens once it's live — no maintenance, no support, no next phase — that's a structural signal. The pricing reflects the plan, and the plan is to hand you the keys and leave.",{"type":31,"tag":764,"props":2983,"children":2985},{"id":2984},"they-cant-show-you-a-2-year-client",[2986],{"type":36,"value":2987},"They can't show you a 2+ year client",{"type":31,"tag":32,"props":2989,"children":2990},{},[2991],{"type":36,"value":2992},"Just ask: \"Show me a client you've worked with for more than two years, and let me talk to them.\" A partner who stays will have one and will be glad to connect you. A partner who churns through projects will have references — but all of them recent, all of them short. Notice which kind of evidence you're being shown.",{"type":31,"tag":764,"props":2994,"children":2996},{"id":2995},"rotating-contractors-and-a-bench",[2997],{"type":36,"value":2998},"Rotating contractors and a bench",{"type":31,"tag":32,"props":3000,"children":3001},{},[3002],{"type":36,"value":3003},"If the people who pitched you aren't the people who'll build — and if those builders rotate as the agency shuffles its bench to fill gaps elsewhere — your project is a slot to be filled, not a relationship to be kept. Ask who specifically will be on your team, and whether they'll still be on it in six months.",{"type":31,"tag":764,"props":3005,"children":3007},{"id":3006},"they-say-yes-to-everything",[3008],{"type":36,"value":3009},"They say yes to everything",{"type":31,"tag":32,"props":3011,"children":3012},{},[3013],{"type":36,"value":3014},"A partner who never pushes back isn't being agreeable; they're optimizing for the contract, not your outcome. The team that's planning to be around in two years will tell you when a feature can wait, when a timeline is unrealistic, or when you're about to build the wrong thing — because they'll be the ones living with the consequences alongside you. Honest friction early is a sign of a partner who's thinking long-term.",{"type":31,"tag":80,"props":3016,"children":3018},{"id":3017},"the-questions-that-actually-surface-staying-power",[3019],{"type":36,"value":3020},"The Questions That Actually Surface Staying Power",{"type":31,"tag":32,"props":3022,"children":3023},{},[3024],{"type":36,"value":3025},"Most vetting checklists ask about experience and communication. Useful, but every agency clears that bar. These are the questions that actually separate the partners who stay from the ones who don't. Ask them out loud, in the sales call, and watch how comfortably they answer.",{"type":31,"tag":243,"props":3027,"children":3028},{},[3029,3039,3049,3065,3075],{"type":31,"tag":247,"props":3030,"children":3031},{},[3032,3037],{"type":31,"tag":60,"props":3033,"children":3034},{},[3035],{"type":36,"value":3036},"\"Show me a client you've worked with for 2+ years — and let me talk to them.\"",{"type":36,"value":3038}," The single most revealing question. Longevity that can be verified by a real customer beats any case study.",{"type":31,"tag":247,"props":3040,"children":3041},{},[3042,3047],{"type":31,"tag":60,"props":3043,"children":3044},{},[3045],{"type":36,"value":3046},"\"What's your engineer turnover? Do you keep a bench, or do the people I meet stay on my project?\"",{"type":36,"value":3048}," You're probing whether you'll get a stable team or a rotating cast.",{"type":31,"tag":247,"props":3050,"children":3051},{},[3052,3063],{"type":31,"tag":60,"props":3053,"children":3054},{},[3055,3057,3061],{"type":36,"value":3056},"\"What happens to my team if a key engineer leaves ",{"type":31,"tag":44,"props":3058,"children":3059},{},[3060],{"type":36,"value":2642},{"type":36,"value":3062},"?\"",{"type":36,"value":3064}," Everybody loses people sometimes. The answer you want is about documentation and continuity, not \"don't worry about it.\"",{"type":31,"tag":247,"props":3066,"children":3067},{},[3068,3073],{"type":31,"tag":60,"props":3069,"children":3070},{},[3071],{"type":36,"value":3072},"\"How do you document and hand off, so I'm never dependent on one person?\"",{"type":36,"value":3074}," A partner who builds for your independence answers this easily — and it's the same instinct that keeps you from getting locked in. (More on that below.)",{"type":31,"tag":247,"props":3076,"children":3077},{},[3078,3083],{"type":31,"tag":60,"props":3079,"children":3080},{},[3081],{"type":36,"value":3082},"\"What does our relationship look like 18 months from now?\"",{"type":36,"value":3084}," Watch whether they have an answer at all. The ones who plan to stay have already pictured it.",{"type":31,"tag":32,"props":3086,"children":3087},{},[3088],{"type":36,"value":3089},"The quality of these answers tells you more than any portfolio. A partner who stays has nothing to hide here.",{"type":31,"tag":80,"props":3091,"children":3093},{"id":3092},"longevity-is-a-proxy-for-everything-that-matters",[3094],{"type":36,"value":3095},"Longevity Is a Proxy for Everything That Matters",{"type":31,"tag":32,"props":3097,"children":3098},{},[3099,3101,3106],{"type":36,"value":3100},"Here's why \"will they stay?\" is such a good question: staying is ",{"type":31,"tag":44,"props":3102,"children":3103},{},[3104],{"type":36,"value":3105},"hard",{"type":36,"value":3107},", and it's only possible if a lot of other things are already right.",{"type":31,"tag":32,"props":3109,"children":3110},{},[3111],{"type":36,"value":3112},"A partner can only stay with you for years if they've built maintainable code (or they'd drown in their own mess), documented it well (or they couldn't keep a team productive on it), and kept their own engineers happy enough not to leave. Staying power is downstream of quality. You can't fake a long relationship — it has to be earned, repeatedly, every quarter the client chooses to renew.",{"type":31,"tag":32,"props":3114,"children":3115},{},[3116,3118,3123],{"type":36,"value":3117},"That's why retention is the most honest signal a partner can offer. It isn't a claim about how good they say they are; it's a record of how often clients ",{"type":31,"tag":44,"props":3119,"children":3120},{},[3121],{"type":36,"value":3122},"decided to keep working with them",{"type":36,"value":3124},". When clients tend to stay for years, it's because the partnership keeps being worth it — not because anyone said so in a pitch deck. Ask a prospective partner what their relationships look like over time, and listen for whether the answer is a story or a slogan.",{"type":31,"tag":80,"props":3126,"children":3128},{"id":3127},"what-staying-actually-looks-like-two-stories",[3129],{"type":36,"value":3130},"What Staying Actually Looks Like — Two Stories",{"type":31,"tag":32,"props":3132,"children":3133},{},[3134],{"type":36,"value":3135},"We could tell you we stay. Everyone says that. So instead, here's what staying has actually looked like for us.",{"type":31,"tag":32,"props":3137,"children":3138},{},[3139,3150],{"type":31,"tag":60,"props":3140,"children":3141},{},[3142,3148],{"type":31,"tag":213,"props":3143,"children":3145},{"href":3144},"/case-studies/performline/",[3146],{"type":36,"value":3147},"PerformLine",{"type":36,"value":3149}," started with one engineer.",{"type":36,"value":3151}," Not a team, not a grand plan — a single engineer, embedded to add capacity. That's a small bet, and it should be. Trust gets earned in increments. Over two years, that one engineer became eight-plus, as the work expanded and the relationship deepened. Nobody signed a multi-year master plan on day one. It grew because each quarter was worth the next. That's what staying looks like from the inside: not a contract clause, but a series of decisions to keep going.",{"type":31,"tag":32,"props":3153,"children":3154},{},[3155,3164],{"type":31,"tag":60,"props":3156,"children":3157},{},[3158,3162],{"type":31,"tag":213,"props":3159,"children":3160},{"href":436},[3161],{"type":36,"value":439},{"type":36,"value":3163}," came to us with a validated problem and a tight scope.",{"type":36,"value":3165}," We shipped their MVP in three months. Then they raised funding — and instead of that being the moment a vendor cashes out, it was the moment the real partnership began. Two-plus years later, we're still building together. The MVP was never the finish line. It was the first chapter.",{"type":31,"tag":32,"props":3167,"children":3168},{},[3169,3171,3175],{"type":36,"value":3170},"Neither of those is a story about a heroic launch. They're stories about what happened in the years ",{"type":31,"tag":44,"props":3172,"children":3173},{},[3174],{"type":36,"value":204},{"type":36,"value":3176}," the launch — which is exactly the part the disappearing kind of agency never gets to tell. We don't claim we stay. These are what staying looked like.",{"type":31,"tag":80,"props":3178,"children":3180},{"id":3179},"the-team-model-behind-staying-power",[3181],{"type":36,"value":3182},"The Team Model Behind Staying Power",{"type":31,"tag":32,"props":3184,"children":3185},{},[3186],{"type":36,"value":3187},"Staying isn't just a value; it's structural. It comes out of how a team is built.",{"type":31,"tag":32,"props":3189,"children":3190},{},[3191],{"type":36,"value":3192},"We're twenty-plus engineers with no bench and no rotating juniors. That phrase matters more to you than it might sound. \"No bench\" means nobody on your project is going to be quietly reassigned to fill a gap on someone else's. The engineer who learns your codebase stays on your codebase. \"No rotating juniors\" means the senior person who joined your project isn't a bait-and-switch for a cheaper hire three months in.",{"type":31,"tag":32,"props":3194,"children":3195},{},[3196],{"type":36,"value":3197},"The people you meet are the people who build — and because they stay, your product's context stays with them. That continuity is the quiet engine behind every long relationship we have. You can't have a two-year partnership if the team turns over every quarter.",{"type":31,"tag":80,"props":3199,"children":3201},{"id":3200},"pick-the-model-then-the-partner",[3202],{"type":36,"value":3203},"Pick the Model, Then the Partner",{"type":31,"tag":32,"props":3205,"children":3206},{},[3207,3209,3214,3216,3220,3222,3226],{"type":36,"value":3208},"Choosing a partner is really two decisions, and they're easy to blur. The ",{"type":31,"tag":44,"props":3210,"children":3211},{},[3212],{"type":36,"value":3213},"engagement model",{"type":36,"value":3215}," — dedicated team, project-based, or augmentation — is the structure. Choosing the ",{"type":31,"tag":44,"props":3217,"children":3218},{},[3219],{"type":36,"value":2914},{"type":36,"value":3221}," is everything in this article. Get the model right and the partner wrong, and the structure won't save you. If you haven't settled the structure yet, ",{"type":31,"tag":213,"props":3223,"children":3224},{"href":2904},[3225],{"type":36,"value":2907},{"type":36,"value":3227}," is the companion to this post.",{"type":31,"tag":32,"props":3229,"children":3230},{},[3231,3233,3238,3240,3246],{"type":36,"value":3232},"And here's a test that ties it all together: a partner who'll genuinely stay should also be one who'll let you ",{"type":31,"tag":44,"props":3234,"children":3235},{},[3236],{"type":36,"value":3237},"leave",{"type":36,"value":3239}," freely. That's not a contradiction — it's the same value. A team that builds for your independence, hands over clean code, and never holds your roadmap hostage is a team that's confident you'll stay because the work is good, not because you're trapped. Staying and lock-in-free are two expressions of the same thing: your success over their leverage. We wrote about the other half of that in ",{"type":31,"tag":213,"props":3241,"children":3243},{"href":3242},"/blog/avoiding-vendor-lock-in/",[3244],{"type":36,"value":3245},"avoiding vendor lock-in",{"type":36,"value":3247}," — owning your code, your docs, and your roadmap from day one.",{"type":31,"tag":32,"props":3249,"children":3250},{},[3251,3253,3258,3260,3266,3268,3273,3275,3280],{"type":36,"value":3252},"It's also worth thinking about what ",{"type":31,"tag":44,"props":3254,"children":3255},{},[3256],{"type":36,"value":3257},"kind",{"type":36,"value":3259}," of team you want — a ",{"type":31,"tag":213,"props":3261,"children":3263},{"href":3262},"/blog/code-shop-vs-product-engineering-team/",[3264],{"type":36,"value":3265},"code shop or a product engineering team",{"type":36,"value":3267}," — and how that differs from ",{"type":31,"tag":213,"props":3269,"children":3270},{"href":1526},[3271],{"type":36,"value":3272},"a freelancer versus an agency",{"type":36,"value":3274}," when longevity is what you're after. One thing every long partner should pass: the ",{"type":31,"tag":213,"props":3276,"children":3277},{"href":2337},[3278],{"type":36,"value":3279},"code handoff-readiness",{"type":36,"value":3281}," test.",{"type":31,"tag":80,"props":3283,"children":3285},{"id":3284},"want-a-partner-wholl-still-be-here-in-2-years",[3286],{"type":36,"value":3287},"Want a Partner Who'll Still Be Here in 2 Years?",{"type":31,"tag":32,"props":3289,"children":3290},{},[3291],{"type":36,"value":3292},"Then ask us the hard questions. Ask to talk to a client we've worked with since 2024 and decide for yourself — not from our pitch, but from theirs. We'd rather you choose us because someone we built with told you the truth about us than because we sounded good in a deck.",{"type":31,"tag":32,"props":3294,"children":3295},{},[3296,3300,3302,3308,3309,3314],{"type":31,"tag":213,"props":3297,"children":3298},{"href":519},[3299],{"type":36,"value":2781},{"type":36,"value":3301},", read more about ",{"type":31,"tag":213,"props":3303,"children":3305},{"href":3304},"/about/",[3306],{"type":36,"value":3307},"who we are",{"type":36,"value":2783},{"type":31,"tag":213,"props":3310,"children":3311},{"href":2537},[3312],{"type":36,"value":3313},"long-term delivery",{"type":36,"value":532},{"type":31,"tag":534,"props":3316,"children":3317},{},[],{"type":31,"tag":32,"props":3319,"children":3320},{},[3321],{"type":31,"tag":44,"props":3322,"children":3323},{},[3324,3325,3330,3331,3336,3337],{"type":36,"value":544},{"type":31,"tag":213,"props":3326,"children":3327},{"href":2904},[3328],{"type":36,"value":3329},"Which Engagement Model Fits You",{"type":36,"value":551},{"type":31,"tag":213,"props":3332,"children":3333},{"href":3242},[3334],{"type":36,"value":3335},"Avoiding Vendor Lock-In",{"type":36,"value":551},{"type":31,"tag":213,"props":3338,"children":3339},{"href":3262},[3340],{"type":36,"value":3341},"Code Shop vs Product Engineering Team",{"title":7,"searchDepth":564,"depth":564,"links":3343},[3344,3345,3352,3353,3354,3355,3356,3357],{"id":2919,"depth":564,"text":2922},{"id":2945,"depth":564,"text":2948,"children":3346},[3347,3348,3349,3350,3351],{"id":2956,"depth":1536,"text":2959},{"id":2973,"depth":1536,"text":2976},{"id":2984,"depth":1536,"text":2987},{"id":2995,"depth":1536,"text":2998},{"id":3006,"depth":1536,"text":3009},{"id":3017,"depth":564,"text":3020},{"id":3092,"depth":564,"text":3095},{"id":3127,"depth":564,"text":3130},{"id":3179,"depth":564,"text":3182},{"id":3200,"depth":564,"text":3203},{"id":3284,"depth":564,"text":3287},"content:blog:choosing-engineering-partner.md","blog/choosing-engineering-partner.md","blog/choosing-engineering-partner",{"_path":3362,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3363,"description":3364,"topic":3365,"author":11,"authorProfile":12,"coverImg":3366,"coverImgAlt":3367,"published":15,"toc":15,"readingTime":3368,"createdAt":3369,"updatedAt":3369,"keywords":3370,"body":3379,"_type":575,"_id":4102,"_source":577,"_file":4103,"_stem":4104,"_extension":580},"/blog/hiring-python-developers","Hiring Python Developers: What to Actually Screen For","Resume keywords won't tell you if a Python developer is good. Here's what to actually screen for — the code-review test, role-specific skills, and red flags.","Hiring","/images/blog/hiring-python-developers.webp","How to screen Python developers — what to actually look for when hiring","15 min read","2026-05-22",[3371,3372,3373,3374,3375,3376,3377,3378],"how to screen python developers","what to look for when hiring python developers","how to hire python developers","how to vet a python developer","python developer red flags hiring","senior python developer skills to look for","python developer interview what to ask","evaluate python developer without being technical",{"type":28,"children":3380,"toc":4087},[3381,3398,3403,3415,3421,3426,3438,3450,3456,3461,3467,3472,3496,3502,3514,3531,3537,3542,3554,3559,3565,3577,3582,3595,3607,3674,3686,3691,3696,3702,3707,3717,3727,3737,3743,3748,3765,3775,3785,3795,3800,3806,3811,3891,3896,3902,3907,3912,3925,3936,3942,3947,4010,4034,4040,4045,4061,4064],{"type":31,"tag":32,"props":3382,"children":3383},{},[3384,3386,3390,3392,3396],{"type":36,"value":3385},"A resume tells you someone has written Python. It doesn't tell you whether they'll make good decisions inside ",{"type":31,"tag":44,"props":3387,"children":3388},{},[3389],{"type":36,"value":2468},{"type":36,"value":3391}," codebase, for ",{"type":31,"tag":44,"props":3393,"children":3394},{},[3395],{"type":36,"value":2468},{"type":36,"value":3397}," problem. And that gap — between \"knows the language\" and \"good in your context\" — is where most hiring mistakes live.",{"type":31,"tag":32,"props":3399,"children":3400},{},[3401],{"type":36,"value":3402},"This guide is for the two people who usually have to make this call: the CTO or tech lead who can run a technical interview but wants a sharper process, and the non-technical founder who's quietly anxious because they can't read code and don't know how to tell good from convincing. You can screen well from either seat. You just need the right questions, not a CS degree.",{"type":31,"tag":32,"props":3404,"children":3405},{},[3406,3408,3413],{"type":36,"value":3407},"If you're earlier than the screening stage and still figuring out who and how to engage, our guide to ",{"type":31,"tag":213,"props":3409,"children":3410},{"href":1519},[3411],{"type":36,"value":3412},"hiring developers for your startup",{"type":36,"value":3414}," is the better starting point. This one assumes you're ready to evaluate an actual person.",{"type":31,"tag":80,"props":3416,"children":3418},{"id":3417},"why-resume-keywords-tell-you-almost-nothing",[3419],{"type":36,"value":3420},"Why Resume Keywords Tell You Almost Nothing",{"type":31,"tag":32,"props":3422,"children":3423},{},[3424],{"type":36,"value":3425},"\"Knows Django, Pandas, follows PEP 8.\" Fine. So does almost every candidate who'll reach your inbox. Those are table stakes, not signal.",{"type":31,"tag":32,"props":3427,"children":3428},{},[3429,3431,3436],{"type":36,"value":3430},"The keyword list tells you what someone has been ",{"type":31,"tag":44,"props":3432,"children":3433},{},[3434],{"type":36,"value":3435},"near",{"type":36,"value":3437},". It says nothing about the thing you actually care about: when this person hits a fork in your codebase — a performance problem, an ambiguous requirement, a tempting shortcut — do they make the call you'd want made? Do they leave the code better than they found it? Can they explain why?",{"type":31,"tag":32,"props":3439,"children":3440},{},[3441,3443,3448],{"type":36,"value":3442},"That's what screening is for. Not confirming they've heard of the tools, but watching how they think with them. And the good news for the non-technical founder reading this: judgment and communication are things you ",{"type":31,"tag":44,"props":3444,"children":3445},{},[3446],{"type":36,"value":3447},"can",{"type":36,"value":3449}," assess without writing a line of code. We'll get there.",{"type":31,"tag":80,"props":3451,"children":3453},{"id":3452},"screen-for-the-job-you-actually-have",[3454],{"type":36,"value":3455},"Screen for the Job You Actually Have",{"type":31,"tag":32,"props":3457,"children":3458},{},[3459],{"type":36,"value":3460},"\"Senior Python developer\" is almost meaningless on its own. Python runs web backends, data pipelines, and infrastructure scripts — three jobs that reward genuinely different instincts. A brilliant data engineer can be a mediocre API developer, and vice versa. Screen for the work in front of you, not for \"strong Python\" in the abstract.",{"type":31,"tag":764,"props":3462,"children":3464},{"id":3463},"web-and-api-roles",[3465],{"type":36,"value":3466},"Web and API roles",{"type":31,"tag":32,"props":3468,"children":3469},{},[3470],{"type":36,"value":3471},"If they're building your backend or API, look for fluency in Django or FastAPI, sound API design (clear contracts, sensible status codes, versioning), and how they handle authentication and authorization. The single most revealing technical instinct here is database awareness — especially whether they recognize an N+1 query pattern (where code quietly fires one database call per row instead of one for the whole set). A web developer who doesn't think about how the database gets hit will write code that works in the demo and falls over in production.",{"type":31,"tag":32,"props":3473,"children":3474},{},[3475,3477,3482,3484,3489,3491],{"type":36,"value":3476},"A few questions that surface the right instincts: ",{"type":31,"tag":44,"props":3478,"children":3479},{},[3480],{"type":36,"value":3481},"\"Walk me through how you'd design the API for X.\"",{"type":36,"value":3483}," (Listen for versioning, error responses, and pagination — not just the happy path.) ",{"type":31,"tag":44,"props":3485,"children":3486},{},[3487],{"type":36,"value":3488},"\"How do you handle a slow endpoint?\"",{"type":36,"value":3490}," (You want \"I'd profile it and check the queries first,\" not \"I'd add more servers.\") ",{"type":31,"tag":44,"props":3492,"children":3493},{},[3494],{"type":36,"value":3495},"\"How do you keep auth logic from leaking across the codebase?\"",{"type":31,"tag":764,"props":3497,"children":3499},{"id":3498},"data-and-ml-pipeline-roles",[3500],{"type":36,"value":3501},"Data and ML pipeline roles",{"type":31,"tag":32,"props":3503,"children":3504},{},[3505,3507,3512],{"type":36,"value":3506},"If they're building data pipelines, the bar shifts to Pandas and NumPy at realistic scale, and — more important than raw speed — ",{"type":31,"tag":44,"props":3508,"children":3509},{},[3510],{"type":36,"value":3511},"data correctness",{"type":36,"value":3513},". Can they reason about what happens when the input is dirty, duplicated, or out of order? Do they care about reproducibility, so the same pipeline run twice gives the same answer? A pipeline that's fast and subtly wrong is worse than a slow one that's right.",{"type":31,"tag":32,"props":3515,"children":3516},{},[3517,3519,3524,3526],{"type":36,"value":3518},"Good probes: ",{"type":31,"tag":44,"props":3520,"children":3521},{},[3522],{"type":36,"value":3523},"\"A daily job silently produced wrong numbers for a week before anyone noticed — how would you have caught it sooner?\"",{"type":36,"value":3525}," (You're listening for validation checks, monitoring, and tests on the data itself.) ",{"type":31,"tag":44,"props":3527,"children":3528},{},[3529],{"type":36,"value":3530},"\"How do you handle a column that's mostly clean but occasionally garbage?\"",{"type":31,"tag":764,"props":3532,"children":3534},{"id":3533},"devops-and-automation-roles",[3535],{"type":36,"value":3536},"DevOps and automation roles",{"type":31,"tag":32,"props":3538,"children":3539},{},[3540],{"type":36,"value":3541},"If they're writing automation and operational scripts, screen for reliability and error handling. Does their script fail loudly and safely, or silently leave things half-done? Do they understand idempotency — that running the same script twice shouldn't double-charge a customer or duplicate a record? Operational code lives in the dark and runs unattended; carelessness there is expensive.",{"type":31,"tag":32,"props":3543,"children":3544},{},[3545,3547,3552],{"type":36,"value":3546},"Ask: ",{"type":31,"tag":44,"props":3548,"children":3549},{},[3550],{"type":36,"value":3551},"\"Your script dies halfway through. What state is the system in, and what happens when it reruns?\"",{"type":36,"value":3553}," The answer tells you whether they've actually operated software in production or only written it.",{"type":31,"tag":32,"props":3555,"children":3556},{},[3557],{"type":36,"value":3558},"Match the screen to the role, and you'll stop rejecting great candidates for lacking skills the job never needed.",{"type":31,"tag":80,"props":3560,"children":3562},{"id":3561},"the-single-best-screen-a-written-code-review",[3563],{"type":36,"value":3564},"The Single Best Screen — A Written Code Review",{"type":31,"tag":32,"props":3566,"children":3567},{},[3568,3570,3575],{"type":36,"value":3569},"If you take one thing from this article, take this: the most revealing screen we know is a ",{"type":31,"tag":44,"props":3571,"children":3572},{},[3573],{"type":36,"value":3574},"written code review",{"type":36,"value":3576},", and almost nobody uses it.",{"type":31,"tag":32,"props":3578,"children":3579},{},[3580],{"type":36,"value":3581},"Hand the candidate a short, flawed function — fifty lines or so — with a few genuine problems baked in. Ask them to review it in writing: what they'd change, and why. Here's the kind of snippet that works:",{"type":31,"tag":3583,"props":3584,"children":3589},"pre",{"className":3585,"code":3587,"language":3588,"meta":7},[3586],"language-python","def get_active_users(user_ids, db, tag=\"active\"):\n    results = []\n    for uid in user_ids:\n        user = db.query(f\"SELECT * FROM users WHERE id = {uid}\")\n        if user[\"status\"] == tag:\n            results.append(user)\n    return results\n\ndef add_to_report(user, report=[]):\n    report.append(user[\"name\"])\n    return report\n","python",[3590],{"type":31,"tag":3591,"props":3592,"children":3593},"code",{"__ignoreMap":7},[3594],{"type":36,"value":3587},{"type":31,"tag":32,"props":3596,"children":3597},{},[3598,3600,3605],{"type":36,"value":3599},"There are at least four real issues in those few lines. A strong candidate will spot most of them and, more importantly, explain ",{"type":31,"tag":44,"props":3601,"children":3602},{},[3603],{"type":36,"value":3604},"why",{"type":36,"value":3606}," each matters:",{"type":31,"tag":243,"props":3608,"children":3609},{},[3610,3628,3638,3656],{"type":31,"tag":247,"props":3611,"children":3612},{},[3613,3618,3620,3626],{"type":31,"tag":60,"props":3614,"children":3615},{},[3616],{"type":36,"value":3617},"The mutable default argument",{"type":36,"value":3619}," (",{"type":31,"tag":3591,"props":3621,"children":3623},{"className":3622},[],[3624],{"type":36,"value":3625},"report=[]",{"type":36,"value":3627},") — that list is created once and shared across every call, so the second report quietly contains the first report's data. A classic Python gotcha that separates people who've been bitten from people who haven't.",{"type":31,"tag":247,"props":3629,"children":3630},{},[3631,3636],{"type":31,"tag":60,"props":3632,"children":3633},{},[3634],{"type":36,"value":3635},"The N+1 query pattern",{"type":36,"value":3637}," — one database round-trip per user instead of a single query for the whole set. Fine for ten users, a disaster for ten thousand.",{"type":31,"tag":247,"props":3639,"children":3640},{},[3641,3646,3648,3654],{"type":31,"tag":60,"props":3642,"children":3643},{},[3644],{"type":36,"value":3645},"The SQL injection / unparameterized query",{"type":36,"value":3647}," — building a query by interpolating ",{"type":31,"tag":3591,"props":3649,"children":3651},{"className":3650},[],[3652],{"type":36,"value":3653},"uid",{"type":36,"value":3655}," into an f-string lets a malicious value run arbitrary SQL. It should use a parameterized query.",{"type":31,"tag":247,"props":3657,"children":3658},{},[3659,3664,3666,3672],{"type":31,"tag":60,"props":3660,"children":3661},{},[3662],{"type":36,"value":3663},"No error handling and no tests",{"type":36,"value":3665}," — what happens when a user ID doesn't exist, the query returns nothing, or ",{"type":31,"tag":3591,"props":3667,"children":3669},{"className":3668},[],[3670],{"type":36,"value":3671},"status",{"type":36,"value":3673}," is missing from the row?",{"type":31,"tag":32,"props":3675,"children":3676},{},[3677,3679,3684],{"type":36,"value":3678},"What this exercise reveals is everything a timed algorithm puzzle hides: real-world judgment, what they prioritize, and — crucially — whether they can explain their reasoning to a teammate or a non-technical founder. A candidate who finds the bugs but can't tell you why they matter is only half the hire. The explanation ",{"type":31,"tag":44,"props":3680,"children":3681},{},[3682],{"type":36,"value":3683},"is",{"type":36,"value":3685}," the signal.",{"type":31,"tag":32,"props":3687,"children":3688},{},[3689],{"type":36,"value":3690},"It also respects everyone's time. It takes you minutes to prepare and them twenty to answer, and you learn more than a two-hour live session usually delivers.",{"type":31,"tag":32,"props":3692,"children":3693},{},[3694],{"type":36,"value":3695},"A note on grading: don't score on catches alone. The best answer ranks the issues by severity (the SQL injection and the silent data bug matter more than style), and a great candidate will ask a clarifying question — \"what's the expected scale here?\" — rather than assuming. Treat that as a plus, not a dodge.",{"type":31,"tag":80,"props":3697,"children":3699},{"id":3698},"live-coding-take-home-or-code-review-when-to-use-which",[3700],{"type":36,"value":3701},"Live Coding, Take-Home, or Code Review — When to Use Which",{"type":31,"tag":32,"props":3703,"children":3704},{},[3705],{"type":36,"value":3706},"Each format tests something real, and each has an honest cost.",{"type":31,"tag":32,"props":3708,"children":3709},{},[3710,3715],{"type":31,"tag":60,"props":3711,"children":3712},{},[3713],{"type":36,"value":3714},"Live coding",{"type":36,"value":3716}," tests how someone thinks under pressure and lets you ask follow-ups in real time. The downside: pressure isn't a real working condition, and plenty of strong, careful engineers freeze in a shared editor while a junior who's memorized the patterns shines. Use it to probe reasoning, not to gate on speed.",{"type":31,"tag":32,"props":3718,"children":3719},{},[3720,3725],{"type":31,"tag":60,"props":3721,"children":3722},{},[3723],{"type":36,"value":3724},"Take-home projects",{"type":36,"value":3726}," respect senior time and show real-world habits — structure, tests, documentation. The downside is completion drop-off: the best candidates often have offers in hand and won't spend a weekend on spec work. Keep it short, or pay for it.",{"type":31,"tag":32,"props":3728,"children":3729},{},[3730,3735],{"type":31,"tag":60,"props":3731,"children":3732},{},[3733],{"type":36,"value":3734},"Written code review",{"type":36,"value":3736}," has the best signal-to-effort ratio of the three. It surfaces judgment and communication, it's quick for both sides, and it's the same skill the job actually requires — most engineering time is spent reading and improving existing code, not writing it from a blank page. If you only run one screen, run this one.",{"type":31,"tag":80,"props":3738,"children":3740},{"id":3739},"if-you-cant-read-code-non-technical-proxies-that-work",[3741],{"type":36,"value":3742},"If You Can't Read Code — Non-Technical Proxies That Work",{"type":31,"tag":32,"props":3744,"children":3745},{},[3746],{"type":36,"value":3747},"If you're a founder who can't read Python, you're not out of options. You're actually well-positioned to test something the code can't: how this person thinks and communicates. Here's what to listen for.",{"type":31,"tag":32,"props":3749,"children":3750},{},[3751,3756,3758,3763],{"type":31,"tag":60,"props":3752,"children":3753},{},[3754],{"type":36,"value":3755},"How they reason about a trade-off.",{"type":36,"value":3757}," Ask something like, \"Why would you choose PostgreSQL over MongoDB for this — or the other way around?\" You're not grading the answer. You're listening for the ",{"type":31,"tag":44,"props":3759,"children":3760},{},[3761],{"type":36,"value":3762},"shape",{"type":36,"value":3764}," of it. A strong engineer says some version of \"it depends, because...\" and walks you through the trade. Be wary of dogma — \"always use X\" — because real engineering is almost never that certain.",{"type":31,"tag":32,"props":3766,"children":3767},{},[3768,3773],{"type":31,"tag":60,"props":3769,"children":3770},{},[3771],{"type":36,"value":3772},"How they explain a past decision in plain language.",{"type":36,"value":3774}," Ask them to walk you through a hard technical call they made and why. Can they translate it so you actually understand it? An engineer who can only explain their work to other engineers will be a constant source of friction for a non-technical founder. The ones who can translate are gold — they'll keep you genuinely informed for years.",{"type":31,"tag":32,"props":3776,"children":3777},{},[3778,3783],{"type":31,"tag":60,"props":3779,"children":3780},{},[3781],{"type":36,"value":3782},"How they handle \"I don't know.\"",{"type":36,"value":3784}," Ask something slightly outside their depth and watch what happens. Do they admit the edge of their knowledge cleanly, then reason toward an answer? Or do they bluff? Honest \"I don't know, but here's how I'd find out\" is the single best long-term signal there is. The bluffers cost you most when the stakes are highest, because they won't tell you when they're guessing.",{"type":31,"tag":32,"props":3786,"children":3787},{},[3788,3793],{"type":31,"tag":60,"props":3789,"children":3790},{},[3791],{"type":36,"value":3792},"How they estimate.",{"type":36,"value":3794}," Ask how long a feature you both understand would take. You're not holding them to the number — you're listening for whether they break it down, name what they're unsure about, and account for testing and the unexpected. \"About two days\" with no caveats is a worse answer than \"three to five days, depending on how the payment integration behaves.\"",{"type":31,"tag":32,"props":3796,"children":3797},{},[3798],{"type":36,"value":3799},"You don't need to evaluate the code. You need to evaluate the judgment behind it — and that comes through in plain conversation.",{"type":31,"tag":80,"props":3801,"children":3803},{"id":3802},"red-flags",[3804],{"type":36,"value":3805},"Red Flags",{"type":31,"tag":32,"props":3807,"children":3808},{},[3809],{"type":36,"value":3810},"A few patterns reliably predict trouble, technical seat or not:",{"type":31,"tag":243,"props":3812,"children":3813},{},[3814,3824,3834,3844,3854,3864,3881],{"type":31,"tag":247,"props":3815,"children":3816},{},[3817,3822],{"type":31,"tag":60,"props":3818,"children":3819},{},[3820],{"type":36,"value":3821},"Dogmatism.",{"type":36,"value":3823}," \"Always use X, never use Y.\" Reality has more exceptions than that.",{"type":31,"tag":247,"props":3825,"children":3826},{},[3827,3832],{"type":31,"tag":60,"props":3828,"children":3829},{},[3830],{"type":36,"value":3831},"Can't explain trade-offs.",{"type":36,"value":3833}," If every answer is a confident absolute, they haven't been burned enough to know the costs.",{"type":31,"tag":247,"props":3835,"children":3836},{},[3837,3842],{"type":31,"tag":60,"props":3838,"children":3839},{},[3840],{"type":36,"value":3841},"No tests in their own work.",{"type":36,"value":3843}," Ask to see something they've built. If there's not a test in sight, that tells you how they'll treat your codebase.",{"type":31,"tag":247,"props":3845,"children":3846},{},[3847,3852],{"type":31,"tag":60,"props":3848,"children":3849},{},[3850],{"type":36,"value":3851},"Can't name a past failure.",{"type":36,"value":3853}," Everyone who's shipped real software has broken something. A candidate with no scars either hasn't done much or isn't being straight with you.",{"type":31,"tag":247,"props":3855,"children":3856},{},[3857,3862],{"type":31,"tag":60,"props":3858,"children":3859},{},[3860],{"type":36,"value":3861},"Blames everyone else.",{"type":36,"value":3863}," When you ask about a project that went wrong, listen for whether they own any part of it. \"The PM gave us bad requirements\" with no self-reflection travels with them to your team.",{"type":31,"tag":247,"props":3865,"children":3866},{},[3867,3872,3874,3879],{"type":31,"tag":60,"props":3868,"children":3869},{},[3870],{"type":36,"value":3871},"Vague about what they personally built.",{"type":36,"value":3873}," On team projects, ask what ",{"type":31,"tag":44,"props":3875,"children":3876},{},[3877],{"type":36,"value":3878},"they",{"type":36,"value":3880}," specifically wrote. Someone who can't separate their work from the group's may be borrowing credit.",{"type":31,"tag":247,"props":3882,"children":3883},{},[3884,3889],{"type":31,"tag":60,"props":3885,"children":3886},{},[3887],{"type":36,"value":3888},"Evasive about gaps.",{"type":36,"value":3890}," Defensiveness about a resume gap or a skill they lack is worse than the gap itself.",{"type":31,"tag":32,"props":3892,"children":3893},{},[3894],{"type":36,"value":3895},"And if you're evaluating an agency or a marketplace rather than an individual, watch for a different set: rotating contractors instead of named people, no trial period offered, and a \"bench\" of unassigned engineers they're clearly trying to place. Those are signs you'll get whoever's free, not whoever's right.",{"type":31,"tag":80,"props":3897,"children":3899},{"id":3898},"when-screening-one-hire-is-the-wrong-move",[3900],{"type":36,"value":3901},"When Screening One Hire Is the Wrong Move",{"type":31,"tag":32,"props":3903,"children":3904},{},[3905],{"type":36,"value":3906},"Sometimes the honest answer is that you shouldn't be screening a single developer at all.",{"type":31,"tag":32,"props":3908,"children":3909},{},[3910],{"type":36,"value":3911},"If you need capacity fast, don't have the time to run a real process, or need more than one stack covered, hiring solo is slow and risky. A single bad hire can cost you months — and you'll have run the whole gauntlet to get there.",{"type":31,"tag":32,"props":3913,"children":3914},{},[3915,3917,3923],{"type":36,"value":3916},"The honest alternative is to borrow a team that's already been screened. That's a large part of what we do: we ",{"type":31,"tag":213,"props":3918,"children":3920},{"href":3919},"/hire-python-developer/",[3921],{"type":36,"value":3922},"hire Python developers",{"type":36,"value":3924}," for our own product the same way we'd help you hire for yours, so when you need senior Python engineers, you get people who've already cleared this bar. Named engineers, a two-week embedded trial so you can watch the actual work before you commit, and no bench — the developer you meet is the one who builds.",{"type":31,"tag":32,"props":3926,"children":3927},{},[3928,3930,3934],{"type":36,"value":3929},"That last point is the whole philosophy. We're a team of twenty-plus engineers with no bench and no rotating juniors. When you work with us, you're not getting whoever happened to be unassigned this week. You're getting a named senior engineer you can hold a real relationship with — the same standard we hold for the people who build ",{"type":31,"tag":213,"props":3931,"children":3932},{"href":456},[3933],{"type":36,"value":459},{"type":36,"value":3935},", our own SaaS product.",{"type":31,"tag":80,"props":3937,"children":3939},{"id":3938},"your-python-screening-checklist",[3940],{"type":36,"value":3941},"Your Python Screening Checklist",{"type":31,"tag":32,"props":3943,"children":3944},{},[3945],{"type":36,"value":3946},"Whatever seat you're in, you can run this:",{"type":31,"tag":2657,"props":3948,"children":3949},{},[3950,3960,3970,3980,3990,4000],{"type":31,"tag":247,"props":3951,"children":3952},{},[3953,3958],{"type":31,"tag":60,"props":3954,"children":3955},{},[3956],{"type":36,"value":3957},"Screen for the role, not the language.",{"type":36,"value":3959}," Web, data, or DevOps — match the questions to the job.",{"type":31,"tag":247,"props":3961,"children":3962},{},[3963,3968],{"type":31,"tag":60,"props":3964,"children":3965},{},[3966],{"type":36,"value":3967},"Lead with a written code review.",{"type":36,"value":3969}," Hand them a flawed function; grade the reasoning, not just the catches.",{"type":31,"tag":247,"props":3971,"children":3972},{},[3973,3978],{"type":31,"tag":60,"props":3974,"children":3975},{},[3976],{"type":36,"value":3977},"Pick the format that fits the seniority.",{"type":36,"value":3979}," Code review for signal-per-minute; take-home for habits (keep it short); live coding for reasoning, never for raw speed.",{"type":31,"tag":247,"props":3981,"children":3982},{},[3983,3988],{"type":31,"tag":60,"props":3984,"children":3985},{},[3986],{"type":36,"value":3987},"If you can't read code, test judgment.",{"type":36,"value":3989}," Trade-off reasoning, plain-language explanation, estimation, and how they handle \"I don't know.\"",{"type":31,"tag":247,"props":3991,"children":3992},{},[3993,3998],{"type":31,"tag":60,"props":3994,"children":3995},{},[3996],{"type":36,"value":3997},"Watch the red flags.",{"type":36,"value":3999}," Dogmatism, no tests, no past failures, blame, evasiveness — and, for vendors, rotating contractors and a bench.",{"type":31,"tag":247,"props":4001,"children":4002},{},[4003,4008],{"type":31,"tag":60,"props":4004,"children":4005},{},[4006],{"type":36,"value":4007},"Know when not to screen solo.",{"type":36,"value":4009}," If it's slow or risky to hire one, borrow a vetted team instead.",{"type":31,"tag":32,"props":4011,"children":4012},{},[4013,4015,4020,4022,4027,4028,4032],{"type":36,"value":4014},"Before you screen anyone, it helps to know exactly what you're hiring for — our guide to ",{"type":31,"tag":213,"props":4016,"children":4017},{"href":215},[4018],{"type":36,"value":4019},"scoping a software project",{"type":36,"value":4021}," keeps you from screening for the wrong role entirely. And if you're weighing one hire against a team, ",{"type":31,"tag":213,"props":4023,"children":4024},{"href":1526},[4025],{"type":36,"value":4026},"freelancer versus agency",{"type":36,"value":2790},{"type":31,"tag":213,"props":4029,"children":4030},{"href":2904},[4031],{"type":36,"value":2907},{"type":36,"value":4033}," are worth a read.",{"type":31,"tag":80,"props":4035,"children":4037},{"id":4036},"need-senior-python-engineers-without-running-the-gauntlet",[4038],{"type":36,"value":4039},"Need Senior Python Engineers Without Running the Gauntlet?",{"type":31,"tag":32,"props":4041,"children":4042},{},[4043],{"type":36,"value":4044},"We'll bring you named, vetted Python developers — with a two-week embedded trial so you can see the work before you commit. No bench, no rotating juniors, no guesswork. The people you meet are the people who build.",{"type":31,"tag":32,"props":4046,"children":4047},{},[4048,4053,4055,4060],{"type":31,"tag":213,"props":4049,"children":4050},{"href":3919},[4051],{"type":36,"value":4052},"Hire Python developers",{"type":36,"value":4054},", or read how we ",{"type":31,"tag":213,"props":4056,"children":4057},{"href":487},[4058],{"type":36,"value":4059},"embed with your team",{"type":36,"value":532},{"type":31,"tag":534,"props":4062,"children":4063},{},[],{"type":31,"tag":32,"props":4065,"children":4066},{},[4067],{"type":31,"tag":44,"props":4068,"children":4069},{},[4070,4071,4076,4077,4081,4082],{"type":36,"value":544},{"type":31,"tag":213,"props":4072,"children":4073},{"href":1519},[4074],{"type":36,"value":4075},"Hiring Developers for Your Startup",{"type":36,"value":551},{"type":31,"tag":213,"props":4078,"children":4079},{"href":2904},[4080],{"type":36,"value":3329},{"type":36,"value":551},{"type":31,"tag":213,"props":4083,"children":4084},{"href":1526},[4085],{"type":36,"value":4086},"Freelancer vs Agency for Software Development",{"title":7,"searchDepth":564,"depth":564,"links":4088},[4089,4090,4095,4096,4097,4098,4099,4100,4101],{"id":3417,"depth":564,"text":3420},{"id":3452,"depth":564,"text":3455,"children":4091},[4092,4093,4094],{"id":3463,"depth":1536,"text":3466},{"id":3498,"depth":1536,"text":3501},{"id":3533,"depth":1536,"text":3536},{"id":3561,"depth":564,"text":3564},{"id":3698,"depth":564,"text":3701},{"id":3739,"depth":564,"text":3742},{"id":3802,"depth":564,"text":3805},{"id":3898,"depth":564,"text":3901},{"id":3938,"depth":564,"text":3941},{"id":4036,"depth":564,"text":4039},"content:blog:hiring-python-developers.md","blog/hiring-python-developers.md","blog/hiring-python-developers",{"_path":4106,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":4107,"description":4108,"topic":4109,"author":11,"authorProfile":12,"coverImg":4110,"coverImgAlt":4111,"published":15,"toc":15,"readingTime":16,"createdAt":4112,"updatedAt":4112,"keywords":4113,"body":4122,"_type":575,"_id":4845,"_source":577,"_file":4846,"_stem":4847,"_extension":580},"/blog/engagement-models","Dedicated Team vs Project-Based vs Staff Augmentation: Which Engagement Model Fits You","Dedicated team, project-based, or staff augmentation? A practical framework to pick the engagement model that fits your scope, timeline, budget, and team.","Engagement Models","/images/blog/engagement-models.webp","Choosing a software development engagement model — dedicated team, project-based, or staff augmentation","2026-05-13",[4114,4115,4116,4117,4118,4119,4120,4121],"software development engagement models","dedicated team vs staff augmentation","dedicated team vs project based vs staff augmentation","which engagement model to choose software development","how to choose a software development engagement model","staff augmentation vs dedicated team vs project outsourcing","fixed price vs dedicated team vs time and material","best engagement model for startup software development",{"type":28,"children":4123,"toc":4826},[4124,4135,4140,4158,4164,4169,4179,4196,4206,4211,4217,4400,4405,4410,4422,4427,4432,4438,4450,4456,4461,4467,4472,4478,4483,4489,4494,4500,4505,4511,4516,4526,4543,4553,4558,4564,4569,4629,4634,4640,4645,4690,4702,4711,4720,4725,4731,4749,4759,4776,4782,4787,4801,4804],{"type":31,"tag":32,"props":4125,"children":4126},{},[4127,4129,4133],{"type":36,"value":4128},"You've decided you need outside engineering help. Good — that part's settled. Now comes the question that trips up most founders and tech leads: ",{"type":31,"tag":44,"props":4130,"children":4131},{},[4132],{"type":36,"value":2899},{"type":36,"value":4134}," do you buy it?",{"type":31,"tag":32,"props":4136,"children":4137},{},[4138],{"type":36,"value":4139},"Dedicated team. Project-based delivery. Staff augmentation. The names get thrown around like they're interchangeable, and the people selling them rarely tell you which one actually fits your situation. So you end up over-managing a project you wanted handed off, or losing control of one you wanted to drive — and paying for the privilege either way.",{"type":31,"tag":32,"props":4141,"children":4142},{},[4143,4145,4151,4153],{"type":36,"value":4144},"This isn't another glossary. If you want the plain-language definitions of staff augmentation versus outsourcing, we wrote that already — ",{"type":31,"tag":213,"props":4146,"children":4148},{"href":4147},"/blog/staff-augmentation-vs-outsourcing/",[4149],{"type":36,"value":4150},"start with our breakdown",{"type":36,"value":4152},". This post answers a different question: ",{"type":31,"tag":44,"props":4154,"children":4155},{},[4156],{"type":36,"value":4157},"which model fits a company at my stage, with my scope and my team?",{"type":31,"tag":80,"props":4159,"children":4161},{"id":4160},"first-this-isnt-about-definitions-its-about-fit",[4162],{"type":36,"value":4163},"First, This Isn't About Definitions — It's About Fit",{"type":31,"tag":32,"props":4165,"children":4166},{},[4167],{"type":36,"value":4168},"Here's the whole picture in a few sentences, so we're working from the same map.",{"type":31,"tag":32,"props":4170,"children":4171},{},[4172,4177],{"type":31,"tag":60,"props":4173,"children":4174},{},[4175],{"type":36,"value":4176},"Staff augmentation",{"type":36,"value":4178}," means you bring engineers into your team. You manage them, they sit in your standups, and they work to your direction. You're renting capacity.",{"type":31,"tag":32,"props":4180,"children":4181},{},[4182,4187,4189,4194],{"type":31,"tag":60,"props":4183,"children":4184},{},[4185],{"type":36,"value":4186},"A dedicated team",{"type":36,"value":4188}," means a partner runs delivery for you. A stable group of engineers owns your product, manages itself, and reports on outcomes. You're renting a team ",{"type":31,"tag":44,"props":4190,"children":4191},{},[4192],{"type":36,"value":4193},"and",{"type":36,"value":4195}," the management that comes with it.",{"type":31,"tag":32,"props":4197,"children":4198},{},[4199,4204],{"type":31,"tag":60,"props":4200,"children":4201},{},[4202],{"type":36,"value":4203},"Project-based delivery",{"type":36,"value":4205}," means you agree on a defined scope, and the partner delivers that outcome — usually on a milestone or fixed-price basis. You're buying a result, not hours.",{"type":31,"tag":32,"props":4207,"children":4208},{},[4209],{"type":36,"value":4210},"That's it. The hard part isn't understanding the three models. It's knowing which one fits when. So let's build a way to decide.",{"type":31,"tag":80,"props":4212,"children":4214},{"id":4213},"the-three-models-at-a-glance",[4215],{"type":36,"value":4216},"The Three Models at a Glance",{"type":31,"tag":630,"props":4218,"children":4219},{},[4220,4244],{"type":31,"tag":634,"props":4221,"children":4222},{},[4223],{"type":31,"tag":638,"props":4224,"children":4225},{},[4226,4229,4234,4239],{"type":31,"tag":642,"props":4227,"children":4228},{},[],{"type":31,"tag":642,"props":4230,"children":4231},{},[4232],{"type":36,"value":4233},"Staff Augmentation",{"type":31,"tag":642,"props":4235,"children":4236},{},[4237],{"type":36,"value":4238},"Dedicated Team",{"type":31,"tag":642,"props":4240,"children":4241},{},[4242],{"type":36,"value":4243},"Project-Based / Fixed",{"type":31,"tag":659,"props":4245,"children":4246},{},[4247,4271,4297,4323,4349,4374],{"type":31,"tag":638,"props":4248,"children":4249},{},[4250,4258,4262,4267],{"type":31,"tag":666,"props":4251,"children":4252},{},[4253],{"type":31,"tag":60,"props":4254,"children":4255},{},[4256],{"type":36,"value":4257},"Who manages delivery",{"type":31,"tag":666,"props":4259,"children":4260},{},[4261],{"type":36,"value":2583},{"type":31,"tag":666,"props":4263,"children":4264},{},[4265],{"type":36,"value":4266},"The partner",{"type":31,"tag":666,"props":4268,"children":4269},{},[4270],{"type":36,"value":4266},{"type":31,"tag":638,"props":4272,"children":4273},{},[4274,4282,4287,4292],{"type":31,"tag":666,"props":4275,"children":4276},{},[4277],{"type":31,"tag":60,"props":4278,"children":4279},{},[4280],{"type":36,"value":4281},"Control over the day-to-day",{"type":31,"tag":666,"props":4283,"children":4284},{},[4285],{"type":36,"value":4286},"High",{"type":31,"tag":666,"props":4288,"children":4289},{},[4290],{"type":36,"value":4291},"Shared",{"type":31,"tag":666,"props":4293,"children":4294},{},[4295],{"type":36,"value":4296},"Low (you own the outcome, not the steering)",{"type":31,"tag":638,"props":4298,"children":4299},{},[4300,4308,4313,4318],{"type":31,"tag":666,"props":4301,"children":4302},{},[4303],{"type":31,"tag":60,"props":4304,"children":4305},{},[4306],{"type":36,"value":4307},"Cost shape",{"type":31,"tag":666,"props":4309,"children":4310},{},[4311],{"type":36,"value":4312},"Predictable per-seat",{"type":31,"tag":666,"props":4314,"children":4315},{},[4316],{"type":36,"value":4317},"Predictable monthly",{"type":31,"tag":666,"props":4319,"children":4320},{},[4321],{"type":36,"value":4322},"Milestone or fixed",{"type":31,"tag":638,"props":4324,"children":4325},{},[4326,4334,4339,4344],{"type":31,"tag":666,"props":4327,"children":4328},{},[4329],{"type":31,"tag":60,"props":4330,"children":4331},{},[4332],{"type":36,"value":4333},"Best timeline",{"type":31,"tag":666,"props":4335,"children":4336},{},[4337],{"type":36,"value":4338},"Short burst to ongoing",{"type":31,"tag":666,"props":4340,"children":4341},{},[4342],{"type":36,"value":4343},"Long roadmap (years)",{"type":31,"tag":666,"props":4345,"children":4346},{},[4347],{"type":36,"value":4348},"Defined, time-boxed",{"type":31,"tag":638,"props":4350,"children":4351},{},[4352,4360,4365,4369],{"type":31,"tag":666,"props":4353,"children":4354},{},[4355],{"type":31,"tag":60,"props":4356,"children":4357},{},[4358],{"type":36,"value":4359},"Scope certainty needed",{"type":31,"tag":666,"props":4361,"children":4362},{},[4363],{"type":36,"value":4364},"Low — scope can flex",{"type":31,"tag":666,"props":4366,"children":4367},{},[4368],{"type":36,"value":4364},{"type":31,"tag":666,"props":4370,"children":4371},{},[4372],{"type":36,"value":4373},"High — scope must be stable",{"type":31,"tag":638,"props":4375,"children":4376},{},[4377,4385,4390,4395],{"type":31,"tag":666,"props":4378,"children":4379},{},[4380],{"type":31,"tag":60,"props":4381,"children":4382},{},[4383],{"type":36,"value":4384},"Best for",{"type":31,"tag":666,"props":4386,"children":4387},{},[4388],{"type":36,"value":4389},"You have a tech lead and need capacity",{"type":31,"tag":666,"props":4391,"children":4392},{},[4393],{"type":36,"value":4394},"You want to focus on strategy, not delivery",{"type":31,"tag":666,"props":4396,"children":4397},{},[4398],{"type":36,"value":4399},"You have a clear, stable spec",{"type":31,"tag":32,"props":4401,"children":4402},{},[4403],{"type":36,"value":4404},"Read down the \"best for\" column first. That row usually tells you more than the rest of the table combined.",{"type":31,"tag":764,"props":4406,"children":4408},{"id":4407},"staff-augmentation",[4409],{"type":36,"value":4233},{"type":31,"tag":32,"props":4411,"children":4412},{},[4413,4415,4420],{"type":36,"value":4414},"You manage; the engineers embed. This fits when you already have technical leadership in-house — a CTO or a senior engineer who can set direction and review work — and what you're short on is ",{"type":31,"tag":44,"props":4416,"children":4417},{},[4418],{"type":36,"value":4419},"hands",{"type":36,"value":4421},". You keep full control of the day-to-day. The cost is predictable per seat. It's the easiest model to start and stop.",{"type":31,"tag":764,"props":4423,"children":4425},{"id":4424},"dedicated-team",[4426],{"type":36,"value":4238},{"type":31,"tag":32,"props":4428,"children":4429},{},[4430],{"type":36,"value":4431},"The partner runs delivery. A stable team owns your product and manages itself, so you don't have to. This fits when you have a long roadmap and want to spend your own time on strategy, customers, or fundraising — not on running an engineering team. The cost is a predictable monthly figure. The trade-off is that it needs trust and a real roadmap; it's not built for a six-week experiment.",{"type":31,"tag":764,"props":4433,"children":4435},{"id":4434},"project-based-fixed-delivery",[4436],{"type":36,"value":4437},"Project-Based / Fixed Delivery",{"type":31,"tag":32,"props":4439,"children":4440},{},[4441,4443,4448],{"type":36,"value":4442},"You define the scope, the partner delivers it, usually against milestones or a fixed price. This fits when your scope is genuinely stable — you know exactly what you want built and it isn't going to change much along the way. The appeal is budget certainty. The risk is everything that happens the moment the scope ",{"type":31,"tag":44,"props":4444,"children":4445},{},[4446],{"type":36,"value":4447},"does",{"type":36,"value":4449}," change.",{"type":31,"tag":80,"props":4451,"children":4453},{"id":4452},"the-two-questions-that-decide-it-and-two-more-everyone-forgets",[4454],{"type":36,"value":4455},"The Two Questions That Decide It (and Two More Everyone Forgets)",{"type":31,"tag":32,"props":4457,"children":4458},{},[4459],{"type":36,"value":4460},"Most comparisons stop at two variables: how certain your scope is, and how much you can manage. Those matter — but they leave out the two questions that decide the bill over time. Here are all four.",{"type":31,"tag":764,"props":4462,"children":4464},{"id":4463},"how-certain-is-your-scope",[4465],{"type":36,"value":4466},"How certain is your scope?",{"type":31,"tag":32,"props":4468,"children":4469},{},[4470],{"type":36,"value":4471},"If you know precisely what you're building and you're confident it won't shift, project-based delivery is on the table. If your scope is still moving — and for most early-stage products, it is — a fixed-price contract works against you. Every change becomes a renegotiation. Fluid scope points you toward staff augmentation or a dedicated team, where direction can evolve without a new contract each time.",{"type":31,"tag":764,"props":4473,"children":4475},{"id":4474},"how-much-internal-management-capacity-can-you-give",[4476],{"type":36,"value":4477},"How much internal management capacity can you give?",{"type":31,"tag":32,"props":4479,"children":4480},{},[4481],{"type":36,"value":4482},"Be honest about this one. If you have a tech lead with time to direct engineers, review pull requests, and own the roadmap, staff augmentation lets you plug in capacity cheaply. If you don't have that in-house — or your one technical person is already underwater — a dedicated team is usually the better fit, because the management comes built in. Augmenting a team you can't manage just moves the bottleneck.",{"type":31,"tag":764,"props":4484,"children":4486},{"id":4485},"how-long-is-the-engagement",[4487],{"type":36,"value":4488},"How long is the engagement?",{"type":31,"tag":32,"props":4490,"children":4491},{},[4492],{"type":36,"value":4493},"A short burst — a few weeks to cover a crunch — favors staff augmentation. You spin it up, you spin it down. But over a multi-year build, a dedicated team usually wins on continuity and cost-over-time, because you're not constantly re-ramping new people or coordinating a loose group of individuals.",{"type":31,"tag":764,"props":4495,"children":4497},{"id":4496},"what-budget-shape-do-you-need",[4498],{"type":36,"value":4499},"What budget shape do you need?",{"type":31,"tag":32,"props":4501,"children":4502},{},[4503],{"type":36,"value":4504},"This is the question almost nobody asks out loud, and it quietly drives the decision. Do you need a predictable per-seat number you can scale up and down? Predictable monthly so you can forecast a year out? Or a fixed milestone figure you can take to your board? Each shape maps cleanly to a model — per-seat to staff aug, monthly to a dedicated team, fixed to project-based. Pick the shape your finances actually need, then let it narrow the model.",{"type":31,"tag":80,"props":4506,"children":4508},{"id":4507},"the-honest-trade-offs-nobody-tells-you",[4509],{"type":36,"value":4510},"The Honest Trade-Offs Nobody Tells You",{"type":31,"tag":32,"props":4512,"children":4513},{},[4514],{"type":36,"value":4515},"Here's the part most comparison articles skip, because it complicates the sale.",{"type":31,"tag":32,"props":4517,"children":4518},{},[4519,4524],{"type":31,"tag":60,"props":4520,"children":4521},{},[4522],{"type":36,"value":4523},"Staff augmentation is cheapest up front — and not always cheapest over time.",{"type":36,"value":4525}," Per-seat rates look great on day one. But over twelve to twenty-four months, the coordination overhead, the ramp time on each new person, and any turnover can quietly add up to more than a dedicated team would have cost. Cheap per hour isn't the same as cheap per outcome.",{"type":31,"tag":32,"props":4527,"children":4528},{},[4529,4541],{"type":31,"tag":60,"props":4530,"children":4531},{},[4532,4534,4539],{"type":36,"value":4533},"Fixed-price ",{"type":31,"tag":44,"props":4535,"children":4536},{},[4537],{"type":36,"value":4538},"feels",{"type":36,"value":4540}," the safest, and it's the most fragile.",{"type":36,"value":4542}," A fixed number is comforting until your scope shifts — and on a real product, it always does. Then every change is a line-item negotiation, and the relationship turns adversarial fast. Fixed price only works when the scope genuinely won't move. If you're not certain, you're signing up for friction.",{"type":31,"tag":32,"props":4544,"children":4545},{},[4546,4551],{"type":31,"tag":60,"props":4547,"children":4548},{},[4549],{"type":36,"value":4550},"A dedicated team needs trust and a roadmap.",{"type":36,"value":4552}," It's the strongest model for a long build, but it asks something of you: a real direction to point it at, and enough trust to let the team manage itself. For a quick experiment, it's overkill.",{"type":31,"tag":32,"props":4554,"children":4555},{},[4556],{"type":36,"value":4557},"The honest line is this: the cheapest model on paper is often the most expensive in practice. We'll tell you which one actually fits your stage — even when that's the smaller engagement. That's not us being generous. It's us caring more about your second project with us than your first.",{"type":31,"tag":80,"props":4559,"children":4561},{"id":4560},"answer-these-4-questions-your-model",[4562],{"type":36,"value":4563},"Answer These 4 Questions → Your Model",{"type":31,"tag":32,"props":4565,"children":4566},{},[4567],{"type":36,"value":4568},"Run through these in order. The first answer that clearly fits is usually your model.",{"type":31,"tag":2657,"props":4570,"children":4571},{},[4572,4589,4606,4620],{"type":31,"tag":247,"props":4573,"children":4574},{},[4575,4580,4582,4587],{"type":31,"tag":60,"props":4576,"children":4577},{},[4578],{"type":36,"value":4579},"Is your scope locked and stable?",{"type":36,"value":4581}," → Yes, and it won't move → ",{"type":31,"tag":60,"props":4583,"children":4584},{},[4585],{"type":36,"value":4586},"Project-based / fixed",{"type":36,"value":4588}," is viable.",{"type":31,"tag":247,"props":4590,"children":4591},{},[4592,4597,4599,4604],{"type":31,"tag":60,"props":4593,"children":4594},{},[4595],{"type":36,"value":4596},"Do you have a tech lead with capacity to manage engineers?",{"type":36,"value":4598}," → Yes → ",{"type":31,"tag":60,"props":4600,"children":4601},{},[4602],{"type":36,"value":4603},"Staff augmentation.",{"type":36,"value":4605}," No → keep going.",{"type":31,"tag":247,"props":4607,"children":4608},{},[4609,4614,4615],{"type":31,"tag":60,"props":4610,"children":4611},{},[4612],{"type":36,"value":4613},"Is this a multi-year build where you'd rather focus on strategy than run delivery?",{"type":36,"value":4598},{"type":31,"tag":60,"props":4616,"children":4617},{},[4618],{"type":36,"value":4619},"Dedicated team.",{"type":31,"tag":247,"props":4621,"children":4622},{},[4623,4627],{"type":31,"tag":60,"props":4624,"children":4625},{},[4626],{"type":36,"value":4499},{"type":36,"value":4628}," → Per-seat → staff aug. Predictable monthly → dedicated team. Fixed milestone → project-based.",{"type":31,"tag":32,"props":4630,"children":4631},{},[4632],{"type":36,"value":4633},"If you landed on two different models, you're probably between stages — which is fine. Start with the lighter one. Which brings us to the most useful thing in this whole article.",{"type":31,"tag":80,"props":4635,"children":4637},{"id":4636},"how-these-map-to-how-we-work",[4638],{"type":36,"value":4639},"How These Map to How We Work",{"type":31,"tag":32,"props":4641,"children":4642},{},[4643],{"type":36,"value":4644},"We offer all three models, and we'll tell you plainly which fits.",{"type":31,"tag":243,"props":4646,"children":4647},{},[4648,4658,4669,4679],{"type":31,"tag":247,"props":4649,"children":4650},{},[4651,4653,4657],{"type":36,"value":4652},"Need capacity around your own tech lead → ",{"type":31,"tag":213,"props":4654,"children":4655},{"href":487},[4656],{"type":36,"value":1446},{"type":36,"value":532},{"type":31,"tag":247,"props":4659,"children":4660},{},[4661,4663,4668],{"type":36,"value":4662},"Building your first version → ",{"type":31,"tag":213,"props":4664,"children":4665},{"href":527},[4666],{"type":36,"value":4667},"MVP development",{"type":36,"value":532},{"type":31,"tag":247,"props":4670,"children":4671},{},[4672,4674,4678],{"type":36,"value":4673},"A defined project with a stable scope → ",{"type":31,"tag":213,"props":4675,"children":4676},{"href":2537},[4677],{"type":36,"value":2788},{"type":36,"value":532},{"type":31,"tag":247,"props":4680,"children":4681},{},[4682,4684,4689],{"type":36,"value":4683},"Keeping something running and evolving → ",{"type":31,"tag":213,"props":4685,"children":4686},{"href":2793},[4687],{"type":36,"value":4688},"maintenance and support",{"type":36,"value":532},{"type":31,"tag":32,"props":4691,"children":4692},{},[4693,4695,4700],{"type":36,"value":4694},"But here's the part that matters more than any single mapping: ",{"type":31,"tag":60,"props":4696,"children":4697},{},[4698],{"type":36,"value":4699},"the model isn't a cage.",{"type":36,"value":4701}," You're not locked into the one you start with.",{"type":31,"tag":32,"props":4703,"children":4704},{},[4705,4709],{"type":31,"tag":213,"props":4706,"children":4707},{"href":3144},[4708],{"type":36,"value":3147},{"type":36,"value":4710}," started with a single engineer — straightforward staff augmentation. They needed capacity, we had the right person, and they kept control. Over two years, that grew to eight-plus engineers as the trust deepened and the work expanded. What started as renting one pair of hands became something much closer to a dedicated team. Nobody planned that on day one. It grew because the partnership worked.",{"type":31,"tag":32,"props":4712,"children":4713},{},[4714,4718],{"type":31,"tag":213,"props":4715,"children":4716},{"href":436},[4717],{"type":36,"value":439},{"type":36,"value":4719}," went the other direction. They came to us with a validated problem and a tight scope, so we shipped their MVP as a focused, project-shaped engagement — in three months. Then they raised funding, and the relationship kept going. Two-plus years later, we're still building together.",{"type":31,"tag":32,"props":4721,"children":4722},{},[4723],{"type":36,"value":4724},"That's the thing the standard comparison misses. You can start augmented and grow into a dedicated team. You can start with one project and turn it into a years-long partnership. Most of our clients stay for years, and the engagement model usually shifts at least once along the way. We grow with what you need — you don't have to get the choice perfect today.",{"type":31,"tag":80,"props":4726,"children":4728},{"id":4727},"once-youve-picked-a-model-pick-a-partner-wholl-stay",[4729],{"type":36,"value":4730},"Once You've Picked a Model, Pick a Partner Who'll Stay",{"type":31,"tag":32,"props":4732,"children":4733},{},[4734,4736,4741,4743,4747],{"type":36,"value":4735},"The model is the ",{"type":31,"tag":44,"props":4737,"children":4738},{},[4739],{"type":36,"value":4740},"structure",{"type":36,"value":4742}," of the relationship. It's only half the decision. The other half is ",{"type":31,"tag":44,"props":4744,"children":4745},{},[4746],{"type":36,"value":2914},{"type":36,"value":4748}," you hand the work to — and whether they'll still be around when your roadmap is on its third revision.",{"type":31,"tag":32,"props":4750,"children":4751},{},[4752,4754,4758],{"type":36,"value":4753},"A great model with the wrong partner still leaves you stranded. So once you've narrowed the structure, the next question is how to tell, before you sign, whether a team will actually stay. We wrote a full guide on exactly that: ",{"type":31,"tag":213,"props":4755,"children":4756},{"href":2757},[4757],{"type":36,"value":2760},{"type":36,"value":532},{"type":31,"tag":32,"props":4760,"children":4761},{},[4762,4764,4768,4770,4775],{"type":36,"value":4763},"It's also worth knowing how to engage one developer versus a team — our take on ",{"type":31,"tag":213,"props":4765,"children":4766},{"href":1526},[4767],{"type":36,"value":4026},{"type":36,"value":4769}," covers that — and what kind of team you actually want, in ",{"type":31,"tag":213,"props":4771,"children":4772},{"href":3262},[4773],{"type":36,"value":4774},"code shop versus product engineering team",{"type":36,"value":532},{"type":31,"tag":80,"props":4777,"children":4779},{"id":4778},"not-sure-which-model-fits",[4780],{"type":36,"value":4781},"Not Sure Which Model Fits?",{"type":31,"tag":32,"props":4783,"children":4784},{},[4785],{"type":36,"value":4786},"Tell us where you are — your scope, your timeline, who's on your team. We'll recommend the model that actually fits your stage, honestly, even if it's the smaller engagement. There's no pitch waiting at the end of that conversation, just a clearer answer than you walked in with.",{"type":31,"tag":32,"props":4788,"children":4789},{},[4790,4794,4796,4800],{"type":31,"tag":213,"props":4791,"children":4792},{"href":519},[4793],{"type":36,"value":2781},{"type":36,"value":4795},", or read more about how we ",{"type":31,"tag":213,"props":4797,"children":4798},{"href":487},[4799],{"type":36,"value":4059},{"type":36,"value":532},{"type":31,"tag":534,"props":4802,"children":4803},{},[],{"type":31,"tag":32,"props":4805,"children":4806},{},[4807],{"type":31,"tag":44,"props":4808,"children":4809},{},[4810,4811,4816,4817,4821,4822],{"type":36,"value":544},{"type":31,"tag":213,"props":4812,"children":4813},{"href":4147},[4814],{"type":36,"value":4815},"Staff Augmentation vs Outsourcing: What's the Difference?",{"type":36,"value":551},{"type":31,"tag":213,"props":4818,"children":4819},{"href":2757},[4820],{"type":36,"value":2826},{"type":36,"value":551},{"type":31,"tag":213,"props":4823,"children":4824},{"href":1519},[4825],{"type":36,"value":4075},{"title":7,"searchDepth":564,"depth":564,"links":4827},[4828,4829,4834,4840,4841,4842,4843,4844],{"id":4160,"depth":564,"text":4163},{"id":4213,"depth":564,"text":4216,"children":4830},[4831,4832,4833],{"id":4407,"depth":1536,"text":4233},{"id":4424,"depth":1536,"text":4238},{"id":4434,"depth":1536,"text":4437},{"id":4452,"depth":564,"text":4455,"children":4835},[4836,4837,4838,4839],{"id":4463,"depth":1536,"text":4466},{"id":4474,"depth":1536,"text":4477},{"id":4485,"depth":1536,"text":4488},{"id":4496,"depth":1536,"text":4499},{"id":4507,"depth":564,"text":4510},{"id":4560,"depth":564,"text":4563},{"id":4636,"depth":564,"text":4639},{"id":4727,"depth":564,"text":4730},{"id":4778,"depth":564,"text":4781},"content:blog:engagement-models.md","blog/engagement-models.md","blog/engagement-models",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"topic":10,"author":11,"authorProfile":12,"coverImg":13,"coverImgAlt":14,"published":15,"toc":15,"readingTime":16,"createdAt":17,"updatedAt":17,"keywords":4849,"body":4850,"_type":575,"_id":576,"_source":577,"_file":578,"_stem":579,"_extension":580},[19,20,21,22,23,24,25,26],{"type":28,"children":4851,"toc":5249},[4852,4856,4864,4868,4882,4886,4890,4894,4902,4906,4910,4914,4918,4927,4931,4935,4939,4943,4952,4956,4960,4964,4968,4982,4991,4995,5003,5007,5042,5056,5060,5064,5068,5072,5076,5080,5084,5088,5132,5151,5165,5174,5178,5182,5196,5200,5204,5208,5212,5225,5228],{"type":31,"tag":32,"props":4853,"children":4854},{},[4855],{"type":36,"value":37},{"type":31,"tag":32,"props":4857,"children":4858},{},[4859,4860],{"type":36,"value":42},{"type":31,"tag":44,"props":4861,"children":4862},{},[4863],{"type":36,"value":48},{"type":31,"tag":32,"props":4865,"children":4866},{},[4867],{"type":36,"value":53},{"type":31,"tag":32,"props":4869,"children":4870},{},[4871,4872,4876,4877,4881],{"type":36,"value":58},{"type":31,"tag":60,"props":4873,"children":4874},{},[4875],{"type":36,"value":64},{"type":36,"value":66},{"type":31,"tag":44,"props":4878,"children":4879},{},[4880],{"type":36,"value":71},{"type":36,"value":73},{"type":31,"tag":32,"props":4883,"children":4884},{},[4885],{"type":36,"value":78},{"type":31,"tag":80,"props":4887,"children":4888},{"id":82},[4889],{"type":36,"value":85},{"type":31,"tag":32,"props":4891,"children":4892},{},[4893],{"type":36,"value":90},{"type":31,"tag":32,"props":4895,"children":4896},{},[4897,4898],{"type":36,"value":95},{"type":31,"tag":44,"props":4899,"children":4900},{},[4901],{"type":36,"value":100},{"type":31,"tag":32,"props":4903,"children":4904},{},[4905],{"type":36,"value":105},{"type":31,"tag":32,"props":4907,"children":4908},{},[4909],{"type":36,"value":110},{"type":31,"tag":80,"props":4911,"children":4912},{"id":113},[4913],{"type":36,"value":116},{"type":31,"tag":32,"props":4915,"children":4916},{},[4917],{"type":36,"value":121},{"type":31,"tag":32,"props":4919,"children":4920},{},[4921,4922,4926],{"type":36,"value":126},{"type":31,"tag":44,"props":4923,"children":4924},{},[4925],{"type":36,"value":131},{"type":36,"value":133},{"type":31,"tag":32,"props":4928,"children":4929},{},[4930],{"type":36,"value":138},{"type":31,"tag":32,"props":4932,"children":4933},{},[4934],{"type":36,"value":143},{"type":31,"tag":80,"props":4936,"children":4937},{"id":146},[4938],{"type":36,"value":149},{"type":31,"tag":32,"props":4940,"children":4941},{},[4942],{"type":36,"value":154},{"type":31,"tag":32,"props":4944,"children":4945},{},[4946,4947,4951],{"type":36,"value":159},{"type":31,"tag":44,"props":4948,"children":4949},{},[4950],{"type":36,"value":164},{"type":36,"value":166},{"type":31,"tag":32,"props":4953,"children":4954},{},[4955],{"type":36,"value":171},{"type":31,"tag":32,"props":4957,"children":4958},{},[4959],{"type":36,"value":176},{"type":31,"tag":80,"props":4961,"children":4962},{"id":179},[4963],{"type":36,"value":182},{"type":31,"tag":32,"props":4965,"children":4966},{},[4967],{"type":36,"value":187},{"type":31,"tag":32,"props":4969,"children":4970},{},[4971,4972,4976,4977,4981],{"type":36,"value":192},{"type":31,"tag":44,"props":4973,"children":4974},{},[4975],{"type":36,"value":197},{"type":36,"value":199},{"type":31,"tag":44,"props":4978,"children":4979},{},[4980],{"type":36,"value":204},{"type":36,"value":206},{"type":31,"tag":32,"props":4983,"children":4984},{},[4985,4986,4990],{"type":36,"value":211},{"type":31,"tag":213,"props":4987,"children":4988},{"href":215},[4989],{"type":36,"value":218},{"type":36,"value":220},{"type":31,"tag":80,"props":4992,"children":4993},{"id":223},[4994],{"type":36,"value":226},{"type":31,"tag":32,"props":4996,"children":4997},{},[4998,4999],{"type":36,"value":231},{"type":31,"tag":44,"props":5000,"children":5001},{},[5002],{"type":36,"value":236},{"type":31,"tag":32,"props":5004,"children":5005},{},[5006],{"type":36,"value":241},{"type":31,"tag":243,"props":5008,"children":5009},{},[5010,5018,5026,5034],{"type":31,"tag":247,"props":5011,"children":5012},{},[5013,5017],{"type":31,"tag":60,"props":5014,"children":5015},{},[5016],{"type":36,"value":254},{"type":36,"value":256},{"type":31,"tag":247,"props":5019,"children":5020},{},[5021,5025],{"type":31,"tag":60,"props":5022,"children":5023},{},[5024],{"type":36,"value":264},{"type":36,"value":266},{"type":31,"tag":247,"props":5027,"children":5028},{},[5029,5033],{"type":31,"tag":60,"props":5030,"children":5031},{},[5032],{"type":36,"value":274},{"type":36,"value":276},{"type":31,"tag":247,"props":5035,"children":5036},{},[5037,5041],{"type":31,"tag":60,"props":5038,"children":5039},{},[5040],{"type":36,"value":284},{"type":36,"value":286},{"type":31,"tag":32,"props":5043,"children":5044},{},[5045,5046,5050,5051,5055],{"type":36,"value":291},{"type":31,"tag":60,"props":5047,"children":5048},{},[5049],{"type":36,"value":296},{"type":36,"value":298},{"type":31,"tag":213,"props":5052,"children":5053},{"href":301},[5054],{"type":36,"value":304},{"type":36,"value":306},{"type":31,"tag":32,"props":5057,"children":5058},{},[5059],{"type":36,"value":311},{"type":31,"tag":80,"props":5061,"children":5062},{"id":314},[5063],{"type":36,"value":317},{"type":31,"tag":32,"props":5065,"children":5066},{},[5067],{"type":36,"value":322},{"type":31,"tag":32,"props":5069,"children":5070},{},[5071],{"type":36,"value":327},{"type":31,"tag":32,"props":5073,"children":5074},{},[5075],{"type":36,"value":332},{"type":31,"tag":80,"props":5077,"children":5078},{"id":335},[5079],{"type":36,"value":338},{"type":31,"tag":32,"props":5081,"children":5082},{},[5083],{"type":36,"value":343},{"type":31,"tag":32,"props":5085,"children":5086},{},[5087],{"type":36,"value":348},{"type":31,"tag":243,"props":5089,"children":5091},{"className":5090},[352],[5092,5100,5108,5116,5124],{"type":31,"tag":247,"props":5093,"children":5095},{"className":5094},[357],[5096,5099],{"type":31,"tag":360,"props":5097,"children":5098},{"disabled":15,"type":362},[],{"type":36,"value":365},{"type":31,"tag":247,"props":5101,"children":5103},{"className":5102},[357],[5104,5107],{"type":31,"tag":360,"props":5105,"children":5106},{"disabled":15,"type":362},[],{"type":36,"value":374},{"type":31,"tag":247,"props":5109,"children":5111},{"className":5110},[357],[5112,5115],{"type":31,"tag":360,"props":5113,"children":5114},{"disabled":15,"type":362},[],{"type":36,"value":383},{"type":31,"tag":247,"props":5117,"children":5119},{"className":5118},[357],[5120,5123],{"type":31,"tag":360,"props":5121,"children":5122},{"disabled":15,"type":362},[],{"type":36,"value":392},{"type":31,"tag":247,"props":5125,"children":5127},{"className":5126},[357],[5128,5131],{"type":31,"tag":360,"props":5129,"children":5130},{"disabled":15,"type":362},[],{"type":36,"value":401},{"type":31,"tag":32,"props":5133,"children":5134},{},[5135,5136,5140,5141,5145,5146,5150],{"type":36,"value":406},{"type":31,"tag":213,"props":5137,"children":5138},{"href":215},[5139],{"type":36,"value":411},{"type":36,"value":413},{"type":31,"tag":213,"props":5142,"children":5143},{"href":301},[5144],{"type":36,"value":418},{"type":36,"value":420},{"type":31,"tag":213,"props":5147,"children":5148},{"href":423},[5149],{"type":36,"value":426},{"type":36,"value":428},{"type":31,"tag":32,"props":5152,"children":5153},{},[5154,5155,5159,5160,5164],{"type":36,"value":433},{"type":31,"tag":213,"props":5156,"children":5157},{"href":436},[5158],{"type":36,"value":439},{"type":36,"value":441},{"type":31,"tag":44,"props":5161,"children":5162},{},[5163],{"type":36,"value":446},{"type":36,"value":448},{"type":31,"tag":32,"props":5166,"children":5167},{},[5168,5169,5173],{"type":36,"value":453},{"type":31,"tag":213,"props":5170,"children":5171},{"href":456},[5172],{"type":36,"value":459},{"type":36,"value":461},{"type":31,"tag":80,"props":5175,"children":5176},{"id":464},[5177],{"type":36,"value":467},{"type":31,"tag":32,"props":5179,"children":5180},{},[5181],{"type":36,"value":472},{"type":31,"tag":32,"props":5183,"children":5184},{},[5185,5186,5190,5191,5195],{"type":36,"value":477},{"type":31,"tag":213,"props":5187,"children":5188},{"href":436},[5189],{"type":36,"value":482},{"type":36,"value":484},{"type":31,"tag":213,"props":5192,"children":5193},{"href":487},[5194],{"type":36,"value":490},{"type":36,"value":492},{"type":31,"tag":32,"props":5197,"children":5198},{},[5199],{"type":36,"value":497},{"type":31,"tag":32,"props":5201,"children":5202},{},[5203],{"type":36,"value":502},{"type":31,"tag":80,"props":5205,"children":5206},{"id":505},[5207],{"type":36,"value":508},{"type":31,"tag":32,"props":5209,"children":5210},{},[5211],{"type":36,"value":513},{"type":31,"tag":32,"props":5213,"children":5214},{},[5215,5219,5220,5224],{"type":31,"tag":213,"props":5216,"children":5217},{"href":519},[5218],{"type":36,"value":522},{"type":36,"value":524},{"type":31,"tag":213,"props":5221,"children":5222},{"href":527},[5223],{"type":36,"value":530},{"type":36,"value":532},{"type":31,"tag":534,"props":5226,"children":5227},{},[],{"type":31,"tag":32,"props":5229,"children":5230},{},[5231],{"type":31,"tag":44,"props":5232,"children":5233},{},[5234,5235,5239,5240,5244,5245],{"type":36,"value":544},{"type":31,"tag":213,"props":5236,"children":5237},{"href":215},[5238],{"type":36,"value":549},{"type":36,"value":551},{"type":31,"tag":213,"props":5241,"children":5242},{"href":301},[5243],{"type":36,"value":556},{"type":36,"value":551},{"type":31,"tag":213,"props":5246,"children":5247},{"href":456},[5248],{"type":36,"value":562},{"title":7,"searchDepth":564,"depth":564,"links":5250},[5251,5252,5253,5254,5255,5256,5257,5258,5259],{"id":82,"depth":564,"text":85},{"id":113,"depth":564,"text":116},{"id":146,"depth":564,"text":149},{"id":179,"depth":564,"text":182},{"id":223,"depth":564,"text":226},{"id":314,"depth":564,"text":317},{"id":335,"depth":564,"text":338},{"id":464,"depth":564,"text":467},{"id":505,"depth":564,"text":508},1781076734878]