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