[{"data":1,"prerenderedAt":3563},["ShallowReactive",2],{"blog-choosing-engineering-partner":3,"related-topic-choosing-engineering-partner":553,"related-recent-choosing-engineering-partner":554,"content-query-WS5ncbnxxg":3180},{"_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":547,"_id":548,"_source":549,"_file":550,"_stem":551,"_extension":552},"/blog/choosing-engineering-partner","blog",false,"","How to Choose an Engineering Partner Who'll Still Be Here in 2 Years","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","Tarun Bhukya","https://www.linkedin.com/in/tarun-kumar-bhukya-40168b85/","/images/blog/choosing-engineering-partner.webp","How to choose an engineering partner who'll still be here in two years",true,"12 min read","2026-06-01",[19,20,21,22,23,24,25,26,27],"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":30,"toc":529},"root",[31,39,44,57,85,92,97,102,112,118,123,130,142,148,153,159,164,170,175,181,186,192,197,260,265,271,283,288,300,306,311,327,343,354,360,365,370,375,381,405,425,461,467,472,499,503],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","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":40,"children":41},{},[42],{"type":37,"value":43},"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":45,"children":46},{},[47,49,55],{"type":37,"value":48},"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":50,"props":51,"children":52},"em",{},[53],{"type":37,"value":54},"staying power",{"type":37,"value":56},". 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":58,"children":59},{},[60,62,67,69,76,78,83],{"type":37,"value":61},"If you haven't yet decided ",{"type":32,"tag":50,"props":63,"children":64},{},[65],{"type":37,"value":66},"how",{"type":37,"value":68}," you want to engage a partner — dedicated team, project-based, or augmentation — start with ",{"type":32,"tag":70,"props":71,"children":73},"a",{"href":72},"/blog/engagement-models/",[74],{"type":37,"value":75},"which engagement model fits you",{"type":37,"value":77},". This post is about choosing the ",{"type":32,"tag":50,"props":79,"children":80},{},[81],{"type":37,"value":82},"who",{"type":37,"value":84},", once you know the structure.",{"type":32,"tag":86,"props":87,"children":89},"h2",{"id":88},"the-most-expensive-hire-is-the-one-who-disappears",[90],{"type":37,"value":91},"The Most Expensive Hire Is the One Who Disappears",{"type":32,"tag":33,"props":93,"children":94},{},[95],{"type":37,"value":96},"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":98,"children":99},{},[100],{"type":37,"value":101},"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":103,"children":104},{},[105,107],{"type":37,"value":106},"So before you compare rates or portfolios, ask the question that actually predicts the outcome: ",{"type":32,"tag":50,"props":108,"children":109},{},[110],{"type":37,"value":111},"will these people still be here in two years?",{"type":32,"tag":86,"props":113,"children":115},{"id":114},"_5-signs-a-partner-will-ghost-you-after-launch",[116],{"type":37,"value":117},"5 Signs a Partner Will Ghost You After Launch",{"type":32,"tag":33,"props":119,"children":120},{},[121],{"type":37,"value":122},"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":124,"props":125,"children":127},"h3",{"id":126},"every-conversation-is-about-the-launch-date",[128],{"type":37,"value":129},"Every conversation is about the launch date",{"type":32,"tag":33,"props":131,"children":132},{},[133,135,140],{"type":37,"value":134},"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":50,"props":136,"children":137},{},[138],{"type":37,"value":139},"after",{"type":37,"value":141}," launch — because for them, launch is the start of the relationship, not the finish line.",{"type":32,"tag":124,"props":143,"children":145},{"id":144},"theres-no-post-launch-support-in-the-pricing",[146],{"type":37,"value":147},"There's no post-launch support in the pricing",{"type":32,"tag":33,"props":149,"children":150},{},[151],{"type":37,"value":152},"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":124,"props":154,"children":156},{"id":155},"they-cant-show-you-a-2-year-client",[157],{"type":37,"value":158},"They can't show you a 2+ year client",{"type":32,"tag":33,"props":160,"children":161},{},[162],{"type":37,"value":163},"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":124,"props":165,"children":167},{"id":166},"rotating-contractors-and-a-bench",[168],{"type":37,"value":169},"Rotating contractors and a bench",{"type":32,"tag":33,"props":171,"children":172},{},[173],{"type":37,"value":174},"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":124,"props":176,"children":178},{"id":177},"they-say-yes-to-everything",[179],{"type":37,"value":180},"They say yes to everything",{"type":32,"tag":33,"props":182,"children":183},{},[184],{"type":37,"value":185},"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":86,"props":187,"children":189},{"id":188},"the-questions-that-actually-surface-staying-power",[190],{"type":37,"value":191},"The Questions That Actually Surface Staying Power",{"type":32,"tag":33,"props":193,"children":194},{},[195],{"type":37,"value":196},"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":198,"props":199,"children":200},"ul",{},[201,213,223,240,250],{"type":32,"tag":202,"props":203,"children":204},"li",{},[205,211],{"type":32,"tag":206,"props":207,"children":208},"strong",{},[209],{"type":37,"value":210},"\"Show me a client you've worked with for 2+ years — and let me talk to them.\"",{"type":37,"value":212}," The single most revealing question. Longevity that can be verified by a real customer beats any case study.",{"type":32,"tag":202,"props":214,"children":215},{},[216,221],{"type":32,"tag":206,"props":217,"children":218},{},[219],{"type":37,"value":220},"\"What's your engineer turnover? Do you keep a bench, or do the people I meet stay on my project?\"",{"type":37,"value":222}," You're probing whether you'll get a stable team or a rotating cast.",{"type":32,"tag":202,"props":224,"children":225},{},[226,238],{"type":32,"tag":206,"props":227,"children":228},{},[229,231,236],{"type":37,"value":230},"\"What happens to my team if a key engineer leaves ",{"type":32,"tag":50,"props":232,"children":233},{},[234],{"type":37,"value":235},"you",{"type":37,"value":237},"?\"",{"type":37,"value":239}," Everybody loses people sometimes. The answer you want is about documentation and continuity, not \"don't worry about it.\"",{"type":32,"tag":202,"props":241,"children":242},{},[243,248],{"type":32,"tag":206,"props":244,"children":245},{},[246],{"type":37,"value":247},"\"How do you document and hand off, so I'm never dependent on one person?\"",{"type":37,"value":249}," 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":202,"props":251,"children":252},{},[253,258],{"type":32,"tag":206,"props":254,"children":255},{},[256],{"type":37,"value":257},"\"What does our relationship look like 18 months from now?\"",{"type":37,"value":259}," Watch whether they have an answer at all. The ones who plan to stay have already pictured it.",{"type":32,"tag":33,"props":261,"children":262},{},[263],{"type":37,"value":264},"The quality of these answers tells you more than any portfolio. A partner who stays has nothing to hide here.",{"type":32,"tag":86,"props":266,"children":268},{"id":267},"longevity-is-a-proxy-for-everything-that-matters",[269],{"type":37,"value":270},"Longevity Is a Proxy for Everything That Matters",{"type":32,"tag":33,"props":272,"children":273},{},[274,276,281],{"type":37,"value":275},"Here's why \"will they stay?\" is such a good question: staying is ",{"type":32,"tag":50,"props":277,"children":278},{},[279],{"type":37,"value":280},"hard",{"type":37,"value":282},", and it's only possible if a lot of other things are already right.",{"type":32,"tag":33,"props":284,"children":285},{},[286],{"type":37,"value":287},"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":289,"children":290},{},[291,293,298],{"type":37,"value":292},"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":50,"props":294,"children":295},{},[296],{"type":37,"value":297},"decided to keep working with them",{"type":37,"value":299},". 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":86,"props":301,"children":303},{"id":302},"what-staying-actually-looks-like-two-stories",[304],{"type":37,"value":305},"What Staying Actually Looks Like — Two Stories",{"type":32,"tag":33,"props":307,"children":308},{},[309],{"type":37,"value":310},"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":312,"children":313},{},[314,325],{"type":32,"tag":206,"props":315,"children":316},{},[317,323],{"type":32,"tag":70,"props":318,"children":320},{"href":319},"/case-studies/performline/",[321],{"type":37,"value":322},"PerformLine",{"type":37,"value":324}," started with one engineer.",{"type":37,"value":326}," 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":328,"children":329},{},[330,341],{"type":32,"tag":206,"props":331,"children":332},{},[333,339],{"type":32,"tag":70,"props":334,"children":336},{"href":335},"/case-studies/eitoss/",[337],{"type":37,"value":338},"Eitoss",{"type":37,"value":340}," came to us with a validated problem and a tight scope.",{"type":37,"value":342}," 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":344,"children":345},{},[346,348,352],{"type":37,"value":347},"Neither of those is a story about a heroic launch. They're stories about what happened in the years ",{"type":32,"tag":50,"props":349,"children":350},{},[351],{"type":37,"value":139},{"type":37,"value":353}," 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":86,"props":355,"children":357},{"id":356},"the-team-model-behind-staying-power",[358],{"type":37,"value":359},"The Team Model Behind Staying Power",{"type":32,"tag":33,"props":361,"children":362},{},[363],{"type":37,"value":364},"Staying isn't just a value; it's structural. It comes out of how a team is built.",{"type":32,"tag":33,"props":366,"children":367},{},[368],{"type":37,"value":369},"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":371,"children":372},{},[373],{"type":37,"value":374},"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":86,"props":376,"children":378},{"id":377},"pick-the-model-then-the-partner",[379],{"type":37,"value":380},"Pick the Model, Then the Partner",{"type":32,"tag":33,"props":382,"children":383},{},[384,386,391,393,397,399,403],{"type":37,"value":385},"Choosing a partner is really two decisions, and they're easy to blur. The ",{"type":32,"tag":50,"props":387,"children":388},{},[389],{"type":37,"value":390},"engagement model",{"type":37,"value":392}," — dedicated team, project-based, or augmentation — is the structure. Choosing the ",{"type":32,"tag":50,"props":394,"children":395},{},[396],{"type":37,"value":82},{"type":37,"value":398}," 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":70,"props":400,"children":401},{"href":72},[402],{"type":37,"value":75},{"type":37,"value":404}," is the companion to this post.",{"type":32,"tag":33,"props":406,"children":407},{},[408,410,415,417,423],{"type":37,"value":409},"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":50,"props":411,"children":412},{},[413],{"type":37,"value":414},"leave",{"type":37,"value":416}," 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":70,"props":418,"children":420},{"href":419},"/blog/avoiding-vendor-lock-in/",[421],{"type":37,"value":422},"avoiding vendor lock-in",{"type":37,"value":424}," — owning your code, your docs, and your roadmap from day one.",{"type":32,"tag":33,"props":426,"children":427},{},[428,430,435,437,443,445,451,453,459],{"type":37,"value":429},"It's also worth thinking about what ",{"type":32,"tag":50,"props":431,"children":432},{},[433],{"type":37,"value":434},"kind",{"type":37,"value":436}," of team you want — a ",{"type":32,"tag":70,"props":438,"children":440},{"href":439},"/blog/code-shop-vs-product-engineering-team/",[441],{"type":37,"value":442},"code shop or a product engineering team",{"type":37,"value":444}," — and how that differs from ",{"type":32,"tag":70,"props":446,"children":448},{"href":447},"/blog/freelancer-vs-agency-software-development/",[449],{"type":37,"value":450},"a freelancer versus an agency",{"type":37,"value":452}," when longevity is what you're after. One thing every long partner should pass: the ",{"type":32,"tag":70,"props":454,"children":456},{"href":455},"/blog/agency-code-handoff-ready/",[457],{"type":37,"value":458},"code handoff-readiness",{"type":37,"value":460}," test.",{"type":32,"tag":86,"props":462,"children":464},{"id":463},"want-a-partner-wholl-still-be-here-in-2-years",[465],{"type":37,"value":466},"Want a Partner Who'll Still Be Here in 2 Years?",{"type":32,"tag":33,"props":468,"children":469},{},[470],{"type":37,"value":471},"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":473,"children":474},{},[475,481,483,489,491,497],{"type":32,"tag":70,"props":476,"children":478},{"href":477},"/contact/",[479],{"type":37,"value":480},"Talk to us",{"type":37,"value":482},", read more about ",{"type":32,"tag":70,"props":484,"children":486},{"href":485},"/about/",[487],{"type":37,"value":488},"who we are",{"type":37,"value":490},", or see how we approach ",{"type":32,"tag":70,"props":492,"children":494},{"href":493},"/services/full-project-delivery/",[495],{"type":37,"value":496},"long-term delivery",{"type":37,"value":498},".",{"type":32,"tag":500,"props":501,"children":502},"hr",{},[],{"type":32,"tag":33,"props":504,"children":505},{},[506],{"type":32,"tag":50,"props":507,"children":508},{},[509,511,516,518,523,524],{"type":37,"value":510},"Related reading: ",{"type":32,"tag":70,"props":512,"children":513},{"href":72},[514],{"type":37,"value":515},"Which Engagement Model Fits You",{"type":37,"value":517}," | ",{"type":32,"tag":70,"props":519,"children":520},{"href":419},[521],{"type":37,"value":522},"Avoiding Vendor Lock-In",{"type":37,"value":517},{"type":32,"tag":70,"props":525,"children":526},{"href":439},[527],{"type":37,"value":528},"Code Shop vs Product Engineering Team",{"title":7,"searchDepth":530,"depth":530,"links":531},2,[532,533,541,542,543,544,545,546],{"id":88,"depth":530,"text":91},{"id":114,"depth":530,"text":117,"children":534},[535,537,538,539,540],{"id":126,"depth":536,"text":129},3,{"id":144,"depth":536,"text":147},{"id":155,"depth":536,"text":158},{"id":166,"depth":536,"text":169},{"id":177,"depth":536,"text":180},{"id":188,"depth":530,"text":191},{"id":267,"depth":530,"text":270},{"id":302,"depth":530,"text":305},{"id":356,"depth":530,"text":359},{"id":377,"depth":530,"text":380},{"id":463,"depth":530,"text":466},"markdown","content:blog:choosing-engineering-partner.md","content","blog/choosing-engineering-partner.md","blog/choosing-engineering-partner","md",[],[555,1140,1887,2638],{"_path":556,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":557,"description":558,"topic":559,"author":11,"authorProfile":12,"coverImg":560,"coverImgAlt":561,"published":15,"toc":15,"readingTime":562,"createdAt":563,"updatedAt":563,"keywords":564,"body":573,"_type":547,"_id":1137,"_source":549,"_file":1138,"_stem":1139,"_extension":552},"/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",[565,566,567,568,569,570,571,572],"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":574,"toc":1123},[575,580,592,611,616,642,648,653,659,664,670,682,688,700,705,711,716,728,733,769,774,780,785,795,812,822,834,840,845,861,878,890,896,901,913,938,944,949,1020,1025,1031,1043,1056,1062,1067,1089,1092,1100],{"type":32,"tag":33,"props":576,"children":577},{},[578],{"type":37,"value":579},"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":581,"children":582},{},[583,585,590],{"type":37,"value":584},"Under US copyright law, when you hire an outside developer to write software, ",{"type":32,"tag":50,"props":586,"children":587},{},[588],{"type":37,"value":589},"the developer",{"type":37,"value":591}," 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":593,"children":594},{},[595,597,602,604,609],{"type":37,"value":596},"And ownership of the code is only the first kind of dependency. Lock-in is also ",{"type":32,"tag":50,"props":598,"children":599},{},[600],{"type":37,"value":601},"technical",{"type":37,"value":603}," — built on a platform you can't leave — and ",{"type":32,"tag":50,"props":605,"children":606},{},[607],{"type":37,"value":608},"operational",{"type":37,"value":610}," — 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":612,"children":613},{},[614],{"type":37,"value":615},"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":617,"children":618},{},[619,621,626,628,633,635,640],{"type":37,"value":620},"This post is the ",{"type":32,"tag":50,"props":622,"children":623},{},[624],{"type":37,"value":625},"preventative",{"type":37,"value":627}," side of staying free — how to structure the relationship so you're never locked in. Its sibling, ",{"type":32,"tag":70,"props":629,"children":630},{"href":455},[631],{"type":37,"value":632},"is your agency's code handoff-ready?",{"type":37,"value":634},", is the ",{"type":32,"tag":50,"props":636,"children":637},{},[638],{"type":37,"value":639},"diagnostic",{"type":37,"value":641}," side: how to evaluate code a team is already writing. Read both.",{"type":32,"tag":86,"props":643,"children":645},{"id":644},"the-three-kinds-of-lock-in",[646],{"type":37,"value":647},"The Three Kinds of Lock-In",{"type":32,"tag":33,"props":649,"children":650},{},[651],{"type":37,"value":652},"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":124,"props":654,"children":656},{"id":655},"contractual-lock-in",[657],{"type":37,"value":658},"Contractual lock-in",{"type":32,"tag":33,"props":660,"children":661},{},[662],{"type":37,"value":663},"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":124,"props":665,"children":667},{"id":666},"technical-lock-in",[668],{"type":37,"value":669},"Technical lock-in",{"type":32,"tag":33,"props":671,"children":672},{},[673,675,680],{"type":37,"value":674},"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":50,"props":676,"children":677},{},[678],{"type":37,"value":679},"configuration",{"type":37,"value":681}," 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":124,"props":683,"children":685},{"id":684},"operational-lock-in",[686],{"type":37,"value":687},"Operational lock-in",{"type":32,"tag":33,"props":689,"children":690},{},[691,693,698],{"type":37,"value":692},"The code works, but it's undocumented, and only the people who wrote it understand it. Worse, the ",{"type":32,"tag":50,"props":694,"children":695},{},[696],{"type":37,"value":697},"roadmap",{"type":37,"value":699}," 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":701,"children":702},{},[703],{"type":37,"value":704},"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":86,"props":706,"children":708},{"id":707},"contract-own-the-ip-from-day-one",[709],{"type":37,"value":710},"Contract: Own the IP From Day One",{"type":32,"tag":33,"props":712,"children":713},{},[714],{"type":37,"value":715},"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":717,"children":718},{},[719,721,726],{"type":37,"value":720},"You want a clear ",{"type":32,"tag":206,"props":722,"children":723},{},[724],{"type":37,"value":725},"IP-assignment / work-for-hire provision",{"type":37,"value":727}," 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":729,"children":730},{},[731],{"type":37,"value":732},"Two more things to check while you're in the contract:",{"type":32,"tag":198,"props":734,"children":735},{},[736,746],{"type":32,"tag":202,"props":737,"children":738},{},[739,744],{"type":32,"tag":206,"props":740,"children":741},{},[742],{"type":37,"value":743},"Third-party and open-source components.",{"type":37,"value":745}," 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":202,"props":747,"children":748},{},[749,754,756,761,763,767],{"type":32,"tag":206,"props":750,"children":751},{},[752],{"type":37,"value":753},"Repositories and accounts in your name.",{"type":37,"value":755}," The code should live in ",{"type":32,"tag":50,"props":757,"children":758},{},[759],{"type":37,"value":760},"your",{"type":37,"value":762}," version control, on ",{"type":32,"tag":50,"props":764,"children":765},{},[766],{"type":37,"value":760},{"type":37,"value":768}," cloud accounts, from the start — not in the vendor's, with you as a guest.",{"type":32,"tag":33,"props":770,"children":771},{},[772],{"type":37,"value":773},"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":86,"props":775,"children":777},{"id":776},"technology-build-on-things-you-can-leave",[778],{"type":37,"value":779},"Technology: Build on Things You Can Leave",{"type":32,"tag":33,"props":781,"children":782},{},[783],{"type":37,"value":784},"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":786,"children":787},{},[788,793],{"type":32,"tag":206,"props":789,"children":790},{},[791],{"type":37,"value":792},"Favor open standards over proprietary ones.",{"type":37,"value":794}," 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":796,"children":797},{},[798,803,805,810],{"type":32,"tag":206,"props":799,"children":800},{},[801],{"type":37,"value":802},"Understand the low-code / no-code trade-off.",{"type":37,"value":804}," 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":50,"props":806,"children":807},{},[808],{"type":37,"value":809},"configuration inside someone else's system",{"type":37,"value":811},", 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":813,"children":814},{},[815,820],{"type":32,"tag":206,"props":816,"children":817},{},[818],{"type":37,"value":819},"Confirm data portability up front.",{"type":37,"value":821}," 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":823,"children":824},{},[825,827,832],{"type":37,"value":826},"This is also why we're ",{"type":32,"tag":70,"props":828,"children":829},{"href":493},[830],{"type":37,"value":831},"stack-agnostic",{"type":37,"value":833},". 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":86,"props":835,"children":837},{"id":836},"operations-documentation-and-roadmap-ownership",[838],{"type":37,"value":839},"Operations: Documentation and Roadmap Ownership",{"type":32,"tag":33,"props":841,"children":842},{},[843],{"type":37,"value":844},"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":846,"children":847},{},[848,853,855,859],{"type":32,"tag":206,"props":849,"children":850},{},[851],{"type":37,"value":852},"Documentation is the antidote to people-dependency.",{"type":37,"value":854}," 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":70,"props":856,"children":857},{"href":455},[858],{"type":37,"value":632},{"type":37,"value":860}," 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":862,"children":863},{},[864,869,871,876],{"type":32,"tag":206,"props":865,"children":866},{},[867],{"type":37,"value":868},"Roadmap ownership is the angle almost nobody talks about.",{"type":37,"value":870}," ",{"type":32,"tag":50,"props":872,"children":873},{},[874],{"type":37,"value":875},"You",{"type":37,"value":877}," 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":879,"children":880},{},[881,883,888],{"type":37,"value":882},"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":50,"props":884,"children":885},{},[886],{"type":37,"value":887},"help",{"type":37,"value":889}," 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":86,"props":891,"children":893},{"id":892},"when-lock-in-is-engineered-on-purpose",[894],{"type":37,"value":895},"When Lock-In Is Engineered on Purpose",{"type":32,"tag":33,"props":897,"children":898},{},[899],{"type":37,"value":900},"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":902,"children":903},{},[904,906,911],{"type":37,"value":905},"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":50,"props":907,"children":908},{},[909],{"type":37,"value":910},"we",{"type":37,"value":912}," think about it, and why.",{"type":32,"tag":33,"props":914,"children":915},{},[916,918,924,926,930,932,936],{"type":37,"value":917},"We built ",{"type":32,"tag":70,"props":919,"children":921},{"href":920},"/blog/why-we-built-formester/",[922],{"type":37,"value":923},"Formester",{"type":37,"value":925},", 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":50,"props":927,"children":928},{},[929],{"type":37,"value":760},{"type":37,"value":931}," product to be owned by ",{"type":32,"tag":50,"props":933,"children":934},{},[935],{"type":37,"value":235},{"type":37,"value":937},". 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":86,"props":939,"children":941},{"id":940},"your-day-one-anti-lock-in-checklist",[942],{"type":37,"value":943},"Your Day-One Anti-Lock-In Checklist",{"type":32,"tag":33,"props":945,"children":946},{},[947],{"type":37,"value":948},"Bring this to the kickoff, not the breakup:",{"type":32,"tag":950,"props":951,"children":952},"ol",{},[953,963,973,983,1000,1010],{"type":32,"tag":202,"props":954,"children":955},{},[956,961],{"type":32,"tag":206,"props":957,"children":958},{},[959],{"type":37,"value":960},"IP-assignment clause signed",{"type":37,"value":962}," — all IP assigned to you on creation. (Counsel reviews it.)",{"type":32,"tag":202,"props":964,"children":965},{},[966,971],{"type":32,"tag":206,"props":967,"children":968},{},[969],{"type":37,"value":970},"Open standards chosen",{"type":37,"value":972}," — REST, PostgreSQL, standard auth; tools you could find help for tomorrow.",{"type":32,"tag":202,"props":974,"children":975},{},[976,981],{"type":32,"tag":206,"props":977,"children":978},{},[979],{"type":37,"value":980},"Data export confirmed",{"type":37,"value":982}," — everything exportable in a usable format, anytime.",{"type":32,"tag":202,"props":984,"children":985},{},[986,991,993,998],{"type":32,"tag":206,"props":987,"children":988},{},[989],{"type":37,"value":990},"Documentation from day one",{"type":37,"value":992}," — not promised \"at the end.\" (See the ",{"type":32,"tag":70,"props":994,"children":995},{"href":455},[996],{"type":37,"value":997},"handoff-ready checklist",{"type":37,"value":999},".)",{"type":32,"tag":202,"props":1001,"children":1002},{},[1003,1008],{"type":32,"tag":206,"props":1004,"children":1005},{},[1006],{"type":37,"value":1007},"Roadmap owned by you",{"type":37,"value":1009}," — they advise, you decide.",{"type":32,"tag":202,"props":1011,"children":1012},{},[1013,1018],{"type":32,"tag":206,"props":1014,"children":1015},{},[1016],{"type":37,"value":1017},"Code in your repos and accounts",{"type":37,"value":1019}," — yours from the first commit, not the vendor's.",{"type":32,"tag":33,"props":1021,"children":1022},{},[1023],{"type":37,"value":1024},"Six lines. Run them before you sign, and most of the lock-in horror stories simply can't happen to you.",{"type":32,"tag":86,"props":1026,"children":1028},{"id":1027},"avoiding-lock-in-and-choosing-a-partner-who-stays-are-the-same-value",[1029],{"type":37,"value":1030},"Avoiding Lock-In and Choosing a Partner Who Stays Are the Same Value",{"type":32,"tag":33,"props":1032,"children":1033},{},[1034,1036,1041],{"type":37,"value":1035},"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":50,"props":1037,"children":1038},{},[1039],{"type":37,"value":1040},"stays",{"type":37,"value":1042},". 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":1044,"children":1045},{},[1046,1048,1054],{"type":37,"value":1047},"If you're choosing a team for a long build, read the companion to this post: ",{"type":32,"tag":70,"props":1049,"children":1051},{"href":1050},"/blog/choosing-engineering-partner/",[1052],{"type":37,"value":1053},"how to choose an engineering partner who'll still be here in two years",{"type":37,"value":1055},". The partner who'll let you leave freely is, more often than not, the one you'll never want to.",{"type":32,"tag":86,"props":1057,"children":1059},{"id":1058},"want-a-partner-who-builds-for-your-independence",[1060],{"type":37,"value":1061},"Want a Partner Who Builds for Your Independence?",{"type":32,"tag":33,"props":1063,"children":1064},{},[1065],{"type":37,"value":1066},"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":1068,"children":1069},{},[1070,1074,1075,1080,1082,1088],{"type":32,"tag":70,"props":1071,"children":1072},{"href":477},[1073],{"type":37,"value":480},{"type":37,"value":490},{"type":32,"tag":70,"props":1076,"children":1077},{"href":493},[1078],{"type":37,"value":1079},"full project delivery",{"type":37,"value":1081}," and ",{"type":32,"tag":70,"props":1083,"children":1085},{"href":1084},"/services/maintenance-support/",[1086],{"type":37,"value":1087},"ongoing maintenance without lock-in",{"type":37,"value":498},{"type":32,"tag":500,"props":1090,"children":1091},{},[],{"type":32,"tag":33,"props":1093,"children":1094},{},[1095],{"type":32,"tag":50,"props":1096,"children":1097},{},[1098],{"type":37,"value":1099},"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":1101,"children":1102},{},[1103],{"type":32,"tag":50,"props":1104,"children":1105},{},[1106,1107,1112,1113,1117,1118],{"type":37,"value":510},{"type":32,"tag":70,"props":1108,"children":1109},{"href":455},[1110],{"type":37,"value":1111},"Is Your Agency's Code Handoff-Ready?",{"type":37,"value":517},{"type":32,"tag":70,"props":1114,"children":1115},{"href":1050},[1116],{"type":37,"value":8},{"type":37,"value":517},{"type":32,"tag":70,"props":1119,"children":1120},{"href":920},[1121],{"type":37,"value":1122},"Why We Built Formester",{"title":7,"searchDepth":530,"depth":530,"links":1124},[1125,1130,1131,1132,1133,1134,1135,1136],{"id":644,"depth":530,"text":647,"children":1126},[1127,1128,1129],{"id":655,"depth":536,"text":658},{"id":666,"depth":536,"text":669},{"id":684,"depth":536,"text":687},{"id":707,"depth":530,"text":710},{"id":776,"depth":530,"text":779},{"id":836,"depth":530,"text":839},{"id":892,"depth":530,"text":895},{"id":940,"depth":530,"text":943},{"id":1027,"depth":530,"text":1030},{"id":1058,"depth":530,"text":1061},"content:blog:avoiding-vendor-lock-in.md","blog/avoiding-vendor-lock-in.md","blog/avoiding-vendor-lock-in",{"_path":1141,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1142,"description":1143,"topic":1144,"author":11,"authorProfile":12,"coverImg":1145,"coverImgAlt":1146,"published":15,"toc":15,"readingTime":1147,"createdAt":1148,"updatedAt":1148,"keywords":1149,"body":1158,"_type":547,"_id":1884,"_source":549,"_file":1885,"_stem":1886,"_extension":552},"/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",[1150,1151,1152,1153,1154,1155,1156,1157],"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":1159,"toc":1869},[1160,1177,1182,1195,1201,1206,1218,1230,1236,1241,1247,1252,1276,1282,1294,1311,1317,1322,1334,1339,1345,1357,1362,1375,1387,1454,1466,1471,1476,1482,1487,1497,1507,1517,1523,1528,1545,1555,1565,1575,1580,1586,1591,1671,1676,1682,1687,1692,1705,1716,1722,1727,1790,1815,1821,1826,1843,1846],{"type":32,"tag":33,"props":1161,"children":1162},{},[1163,1165,1169,1171,1175],{"type":37,"value":1164},"A resume tells you someone has written Python. It doesn't tell you whether they'll make good decisions inside ",{"type":32,"tag":50,"props":1166,"children":1167},{},[1168],{"type":37,"value":760},{"type":37,"value":1170}," codebase, for ",{"type":32,"tag":50,"props":1172,"children":1173},{},[1174],{"type":37,"value":760},{"type":37,"value":1176}," problem. And that gap — between \"knows the language\" and \"good in your context\" — is where most hiring mistakes live.",{"type":32,"tag":33,"props":1178,"children":1179},{},[1180],{"type":37,"value":1181},"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":1183,"children":1184},{},[1185,1187,1193],{"type":37,"value":1186},"If you're earlier than the screening stage and still figuring out who and how to engage, our guide to ",{"type":32,"tag":70,"props":1188,"children":1190},{"href":1189},"/blog/hire-developers-startup/",[1191],{"type":37,"value":1192},"hiring developers for your startup",{"type":37,"value":1194}," is the better starting point. This one assumes you're ready to evaluate an actual person.",{"type":32,"tag":86,"props":1196,"children":1198},{"id":1197},"why-resume-keywords-tell-you-almost-nothing",[1199],{"type":37,"value":1200},"Why Resume Keywords Tell You Almost Nothing",{"type":32,"tag":33,"props":1202,"children":1203},{},[1204],{"type":37,"value":1205},"\"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":1207,"children":1208},{},[1209,1211,1216],{"type":37,"value":1210},"The keyword list tells you what someone has been ",{"type":32,"tag":50,"props":1212,"children":1213},{},[1214],{"type":37,"value":1215},"near",{"type":37,"value":1217},". 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":1219,"children":1220},{},[1221,1223,1228],{"type":37,"value":1222},"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":50,"props":1224,"children":1225},{},[1226],{"type":37,"value":1227},"can",{"type":37,"value":1229}," assess without writing a line of code. We'll get there.",{"type":32,"tag":86,"props":1231,"children":1233},{"id":1232},"screen-for-the-job-you-actually-have",[1234],{"type":37,"value":1235},"Screen for the Job You Actually Have",{"type":32,"tag":33,"props":1237,"children":1238},{},[1239],{"type":37,"value":1240},"\"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":124,"props":1242,"children":1244},{"id":1243},"web-and-api-roles",[1245],{"type":37,"value":1246},"Web and API roles",{"type":32,"tag":33,"props":1248,"children":1249},{},[1250],{"type":37,"value":1251},"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":1253,"children":1254},{},[1255,1257,1262,1264,1269,1271],{"type":37,"value":1256},"A few questions that surface the right instincts: ",{"type":32,"tag":50,"props":1258,"children":1259},{},[1260],{"type":37,"value":1261},"\"Walk me through how you'd design the API for X.\"",{"type":37,"value":1263}," (Listen for versioning, error responses, and pagination — not just the happy path.) ",{"type":32,"tag":50,"props":1265,"children":1266},{},[1267],{"type":37,"value":1268},"\"How do you handle a slow endpoint?\"",{"type":37,"value":1270}," (You want \"I'd profile it and check the queries first,\" not \"I'd add more servers.\") ",{"type":32,"tag":50,"props":1272,"children":1273},{},[1274],{"type":37,"value":1275},"\"How do you keep auth logic from leaking across the codebase?\"",{"type":32,"tag":124,"props":1277,"children":1279},{"id":1278},"data-and-ml-pipeline-roles",[1280],{"type":37,"value":1281},"Data and ML pipeline roles",{"type":32,"tag":33,"props":1283,"children":1284},{},[1285,1287,1292],{"type":37,"value":1286},"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":50,"props":1288,"children":1289},{},[1290],{"type":37,"value":1291},"data correctness",{"type":37,"value":1293},". 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":1295,"children":1296},{},[1297,1299,1304,1306],{"type":37,"value":1298},"Good probes: ",{"type":32,"tag":50,"props":1300,"children":1301},{},[1302],{"type":37,"value":1303},"\"A daily job silently produced wrong numbers for a week before anyone noticed — how would you have caught it sooner?\"",{"type":37,"value":1305}," (You're listening for validation checks, monitoring, and tests on the data itself.) ",{"type":32,"tag":50,"props":1307,"children":1308},{},[1309],{"type":37,"value":1310},"\"How do you handle a column that's mostly clean but occasionally garbage?\"",{"type":32,"tag":124,"props":1312,"children":1314},{"id":1313},"devops-and-automation-roles",[1315],{"type":37,"value":1316},"DevOps and automation roles",{"type":32,"tag":33,"props":1318,"children":1319},{},[1320],{"type":37,"value":1321},"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":1323,"children":1324},{},[1325,1327,1332],{"type":37,"value":1326},"Ask: ",{"type":32,"tag":50,"props":1328,"children":1329},{},[1330],{"type":37,"value":1331},"\"Your script dies halfway through. What state is the system in, and what happens when it reruns?\"",{"type":37,"value":1333}," The answer tells you whether they've actually operated software in production or only written it.",{"type":32,"tag":33,"props":1335,"children":1336},{},[1337],{"type":37,"value":1338},"Match the screen to the role, and you'll stop rejecting great candidates for lacking skills the job never needed.",{"type":32,"tag":86,"props":1340,"children":1342},{"id":1341},"the-single-best-screen-a-written-code-review",[1343],{"type":37,"value":1344},"The Single Best Screen — A Written Code Review",{"type":32,"tag":33,"props":1346,"children":1347},{},[1348,1350,1355],{"type":37,"value":1349},"If you take one thing from this article, take this: the most revealing screen we know is a ",{"type":32,"tag":50,"props":1351,"children":1352},{},[1353],{"type":37,"value":1354},"written code review",{"type":37,"value":1356},", and almost nobody uses it.",{"type":32,"tag":33,"props":1358,"children":1359},{},[1360],{"type":37,"value":1361},"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":1363,"props":1364,"children":1369},"pre",{"className":1365,"code":1367,"language":1368,"meta":7},[1366],"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",[1370],{"type":32,"tag":1371,"props":1372,"children":1373},"code",{"__ignoreMap":7},[1374],{"type":37,"value":1367},{"type":32,"tag":33,"props":1376,"children":1377},{},[1378,1380,1385],{"type":37,"value":1379},"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":50,"props":1381,"children":1382},{},[1383],{"type":37,"value":1384},"why",{"type":37,"value":1386}," each matters:",{"type":32,"tag":198,"props":1388,"children":1389},{},[1390,1408,1418,1436],{"type":32,"tag":202,"props":1391,"children":1392},{},[1393,1398,1400,1406],{"type":32,"tag":206,"props":1394,"children":1395},{},[1396],{"type":37,"value":1397},"The mutable default argument",{"type":37,"value":1399}," (",{"type":32,"tag":1371,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":37,"value":1405},"report=[]",{"type":37,"value":1407},") — 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":202,"props":1409,"children":1410},{},[1411,1416],{"type":32,"tag":206,"props":1412,"children":1413},{},[1414],{"type":37,"value":1415},"The N+1 query pattern",{"type":37,"value":1417}," — 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":202,"props":1419,"children":1420},{},[1421,1426,1428,1434],{"type":32,"tag":206,"props":1422,"children":1423},{},[1424],{"type":37,"value":1425},"The SQL injection / unparameterized query",{"type":37,"value":1427}," — building a query by interpolating ",{"type":32,"tag":1371,"props":1429,"children":1431},{"className":1430},[],[1432],{"type":37,"value":1433},"uid",{"type":37,"value":1435}," into an f-string lets a malicious value run arbitrary SQL. It should use a parameterized query.",{"type":32,"tag":202,"props":1437,"children":1438},{},[1439,1444,1446,1452],{"type":32,"tag":206,"props":1440,"children":1441},{},[1442],{"type":37,"value":1443},"No error handling and no tests",{"type":37,"value":1445}," — what happens when a user ID doesn't exist, the query returns nothing, or ",{"type":32,"tag":1371,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":37,"value":1451},"status",{"type":37,"value":1453}," is missing from the row?",{"type":32,"tag":33,"props":1455,"children":1456},{},[1457,1459,1464],{"type":37,"value":1458},"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":50,"props":1460,"children":1461},{},[1462],{"type":37,"value":1463},"is",{"type":37,"value":1465}," the signal.",{"type":32,"tag":33,"props":1467,"children":1468},{},[1469],{"type":37,"value":1470},"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":1472,"children":1473},{},[1474],{"type":37,"value":1475},"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":86,"props":1477,"children":1479},{"id":1478},"live-coding-take-home-or-code-review-when-to-use-which",[1480],{"type":37,"value":1481},"Live Coding, Take-Home, or Code Review — When to Use Which",{"type":32,"tag":33,"props":1483,"children":1484},{},[1485],{"type":37,"value":1486},"Each format tests something real, and each has an honest cost.",{"type":32,"tag":33,"props":1488,"children":1489},{},[1490,1495],{"type":32,"tag":206,"props":1491,"children":1492},{},[1493],{"type":37,"value":1494},"Live coding",{"type":37,"value":1496}," 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":1498,"children":1499},{},[1500,1505],{"type":32,"tag":206,"props":1501,"children":1502},{},[1503],{"type":37,"value":1504},"Take-home projects",{"type":37,"value":1506}," 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":1508,"children":1509},{},[1510,1515],{"type":32,"tag":206,"props":1511,"children":1512},{},[1513],{"type":37,"value":1514},"Written code review",{"type":37,"value":1516}," 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":86,"props":1518,"children":1520},{"id":1519},"if-you-cant-read-code-non-technical-proxies-that-work",[1521],{"type":37,"value":1522},"If You Can't Read Code — Non-Technical Proxies That Work",{"type":32,"tag":33,"props":1524,"children":1525},{},[1526],{"type":37,"value":1527},"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":1529,"children":1530},{},[1531,1536,1538,1543],{"type":32,"tag":206,"props":1532,"children":1533},{},[1534],{"type":37,"value":1535},"How they reason about a trade-off.",{"type":37,"value":1537}," 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":50,"props":1539,"children":1540},{},[1541],{"type":37,"value":1542},"shape",{"type":37,"value":1544}," 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":1546,"children":1547},{},[1548,1553],{"type":32,"tag":206,"props":1549,"children":1550},{},[1551],{"type":37,"value":1552},"How they explain a past decision in plain language.",{"type":37,"value":1554}," 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":1556,"children":1557},{},[1558,1563],{"type":32,"tag":206,"props":1559,"children":1560},{},[1561],{"type":37,"value":1562},"How they handle \"I don't know.\"",{"type":37,"value":1564}," 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":1566,"children":1567},{},[1568,1573],{"type":32,"tag":206,"props":1569,"children":1570},{},[1571],{"type":37,"value":1572},"How they estimate.",{"type":37,"value":1574}," 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":1576,"children":1577},{},[1578],{"type":37,"value":1579},"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":86,"props":1581,"children":1583},{"id":1582},"red-flags",[1584],{"type":37,"value":1585},"Red Flags",{"type":32,"tag":33,"props":1587,"children":1588},{},[1589],{"type":37,"value":1590},"A few patterns reliably predict trouble, technical seat or not:",{"type":32,"tag":198,"props":1592,"children":1593},{},[1594,1604,1614,1624,1634,1644,1661],{"type":32,"tag":202,"props":1595,"children":1596},{},[1597,1602],{"type":32,"tag":206,"props":1598,"children":1599},{},[1600],{"type":37,"value":1601},"Dogmatism.",{"type":37,"value":1603}," \"Always use X, never use Y.\" Reality has more exceptions than that.",{"type":32,"tag":202,"props":1605,"children":1606},{},[1607,1612],{"type":32,"tag":206,"props":1608,"children":1609},{},[1610],{"type":37,"value":1611},"Can't explain trade-offs.",{"type":37,"value":1613}," If every answer is a confident absolute, they haven't been burned enough to know the costs.",{"type":32,"tag":202,"props":1615,"children":1616},{},[1617,1622],{"type":32,"tag":206,"props":1618,"children":1619},{},[1620],{"type":37,"value":1621},"No tests in their own work.",{"type":37,"value":1623}," 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":202,"props":1625,"children":1626},{},[1627,1632],{"type":32,"tag":206,"props":1628,"children":1629},{},[1630],{"type":37,"value":1631},"Can't name a past failure.",{"type":37,"value":1633}," 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":202,"props":1635,"children":1636},{},[1637,1642],{"type":32,"tag":206,"props":1638,"children":1639},{},[1640],{"type":37,"value":1641},"Blames everyone else.",{"type":37,"value":1643}," 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":202,"props":1645,"children":1646},{},[1647,1652,1654,1659],{"type":32,"tag":206,"props":1648,"children":1649},{},[1650],{"type":37,"value":1651},"Vague about what they personally built.",{"type":37,"value":1653}," On team projects, ask what ",{"type":32,"tag":50,"props":1655,"children":1656},{},[1657],{"type":37,"value":1658},"they",{"type":37,"value":1660}," specifically wrote. Someone who can't separate their work from the group's may be borrowing credit.",{"type":32,"tag":202,"props":1662,"children":1663},{},[1664,1669],{"type":32,"tag":206,"props":1665,"children":1666},{},[1667],{"type":37,"value":1668},"Evasive about gaps.",{"type":37,"value":1670}," Defensiveness about a resume gap or a skill they lack is worse than the gap itself.",{"type":32,"tag":33,"props":1672,"children":1673},{},[1674],{"type":37,"value":1675},"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":86,"props":1677,"children":1679},{"id":1678},"when-screening-one-hire-is-the-wrong-move",[1680],{"type":37,"value":1681},"When Screening One Hire Is the Wrong Move",{"type":32,"tag":33,"props":1683,"children":1684},{},[1685],{"type":37,"value":1686},"Sometimes the honest answer is that you shouldn't be screening a single developer at all.",{"type":32,"tag":33,"props":1688,"children":1689},{},[1690],{"type":37,"value":1691},"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":1693,"children":1694},{},[1695,1697,1703],{"type":37,"value":1696},"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":70,"props":1698,"children":1700},{"href":1699},"/hire-python-developer/",[1701],{"type":37,"value":1702},"hire Python developers",{"type":37,"value":1704}," 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":1706,"children":1707},{},[1708,1710,1714],{"type":37,"value":1709},"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":70,"props":1711,"children":1712},{"href":920},[1713],{"type":37,"value":923},{"type":37,"value":1715},", our own SaaS product.",{"type":32,"tag":86,"props":1717,"children":1719},{"id":1718},"your-python-screening-checklist",[1720],{"type":37,"value":1721},"Your Python Screening Checklist",{"type":32,"tag":33,"props":1723,"children":1724},{},[1725],{"type":37,"value":1726},"Whatever seat you're in, you can run this:",{"type":32,"tag":950,"props":1728,"children":1729},{},[1730,1740,1750,1760,1770,1780],{"type":32,"tag":202,"props":1731,"children":1732},{},[1733,1738],{"type":32,"tag":206,"props":1734,"children":1735},{},[1736],{"type":37,"value":1737},"Screen for the role, not the language.",{"type":37,"value":1739}," Web, data, or DevOps — match the questions to the job.",{"type":32,"tag":202,"props":1741,"children":1742},{},[1743,1748],{"type":32,"tag":206,"props":1744,"children":1745},{},[1746],{"type":37,"value":1747},"Lead with a written code review.",{"type":37,"value":1749}," Hand them a flawed function; grade the reasoning, not just the catches.",{"type":32,"tag":202,"props":1751,"children":1752},{},[1753,1758],{"type":32,"tag":206,"props":1754,"children":1755},{},[1756],{"type":37,"value":1757},"Pick the format that fits the seniority.",{"type":37,"value":1759}," Code review for signal-per-minute; take-home for habits (keep it short); live coding for reasoning, never for raw speed.",{"type":32,"tag":202,"props":1761,"children":1762},{},[1763,1768],{"type":32,"tag":206,"props":1764,"children":1765},{},[1766],{"type":37,"value":1767},"If you can't read code, test judgment.",{"type":37,"value":1769}," Trade-off reasoning, plain-language explanation, estimation, and how they handle \"I don't know.\"",{"type":32,"tag":202,"props":1771,"children":1772},{},[1773,1778],{"type":32,"tag":206,"props":1774,"children":1775},{},[1776],{"type":37,"value":1777},"Watch the red flags.",{"type":37,"value":1779}," Dogmatism, no tests, no past failures, blame, evasiveness — and, for vendors, rotating contractors and a bench.",{"type":32,"tag":202,"props":1781,"children":1782},{},[1783,1788],{"type":32,"tag":206,"props":1784,"children":1785},{},[1786],{"type":37,"value":1787},"Know when not to screen solo.",{"type":37,"value":1789}," If it's slow or risky to hire one, borrow a vetted team instead.",{"type":32,"tag":33,"props":1791,"children":1792},{},[1793,1795,1801,1803,1808,1809,1813],{"type":37,"value":1794},"Before you screen anyone, it helps to know exactly what you're hiring for — our guide to ",{"type":32,"tag":70,"props":1796,"children":1798},{"href":1797},"/blog/scope-software-project/",[1799],{"type":37,"value":1800},"scoping a software project",{"type":37,"value":1802}," keeps you from screening for the wrong role entirely. And if you're weighing one hire against a team, ",{"type":32,"tag":70,"props":1804,"children":1805},{"href":447},[1806],{"type":37,"value":1807},"freelancer versus agency",{"type":37,"value":1081},{"type":32,"tag":70,"props":1810,"children":1811},{"href":72},[1812],{"type":37,"value":75},{"type":37,"value":1814}," are worth a read.",{"type":32,"tag":86,"props":1816,"children":1818},{"id":1817},"need-senior-python-engineers-without-running-the-gauntlet",[1819],{"type":37,"value":1820},"Need Senior Python Engineers Without Running the Gauntlet?",{"type":32,"tag":33,"props":1822,"children":1823},{},[1824],{"type":37,"value":1825},"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":1827,"children":1828},{},[1829,1834,1836,1842],{"type":32,"tag":70,"props":1830,"children":1831},{"href":1699},[1832],{"type":37,"value":1833},"Hire Python developers",{"type":37,"value":1835},", or read how we ",{"type":32,"tag":70,"props":1837,"children":1839},{"href":1838},"/services/resource-augmentation/",[1840],{"type":37,"value":1841},"embed with your team",{"type":37,"value":498},{"type":32,"tag":500,"props":1844,"children":1845},{},[],{"type":32,"tag":33,"props":1847,"children":1848},{},[1849],{"type":32,"tag":50,"props":1850,"children":1851},{},[1852,1853,1858,1859,1863,1864],{"type":37,"value":510},{"type":32,"tag":70,"props":1854,"children":1855},{"href":1189},[1856],{"type":37,"value":1857},"Hiring Developers for Your Startup",{"type":37,"value":517},{"type":32,"tag":70,"props":1860,"children":1861},{"href":72},[1862],{"type":37,"value":515},{"type":37,"value":517},{"type":32,"tag":70,"props":1865,"children":1866},{"href":447},[1867],{"type":37,"value":1868},"Freelancer vs Agency for Software Development",{"title":7,"searchDepth":530,"depth":530,"links":1870},[1871,1872,1877,1878,1879,1880,1881,1882,1883],{"id":1197,"depth":530,"text":1200},{"id":1232,"depth":530,"text":1235,"children":1873},[1874,1875,1876],{"id":1243,"depth":536,"text":1246},{"id":1278,"depth":536,"text":1281},{"id":1313,"depth":536,"text":1316},{"id":1341,"depth":530,"text":1344},{"id":1478,"depth":530,"text":1481},{"id":1519,"depth":530,"text":1522},{"id":1582,"depth":530,"text":1585},{"id":1678,"depth":530,"text":1681},{"id":1718,"depth":530,"text":1721},{"id":1817,"depth":530,"text":1820},"content:blog:hiring-python-developers.md","blog/hiring-python-developers.md","blog/hiring-python-developers",{"_path":1888,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1889,"description":1890,"topic":1891,"author":11,"authorProfile":12,"coverImg":1892,"coverImgAlt":1893,"published":15,"toc":15,"readingTime":16,"createdAt":1894,"updatedAt":1894,"keywords":1895,"body":1904,"_type":547,"_id":2635,"_source":549,"_file":2636,"_stem":2637,"_extension":552},"/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",[1896,1897,1898,1899,1900,1901,1902,1903],"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":1905,"toc":2616},[1906,1917,1922,1940,1946,1951,1961,1978,1988,1993,1999,2188,2193,2198,2210,2215,2220,2226,2238,2244,2249,2255,2260,2266,2271,2277,2282,2288,2293,2299,2304,2314,2331,2341,2346,2352,2357,2417,2422,2428,2433,2480,2492,2501,2510,2515,2521,2539,2549,2566,2572,2577,2591,2594],{"type":32,"tag":33,"props":1907,"children":1908},{},[1909,1911,1915],{"type":37,"value":1910},"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":50,"props":1912,"children":1913},{},[1914],{"type":37,"value":66},{"type":37,"value":1916}," do you buy it?",{"type":32,"tag":33,"props":1918,"children":1919},{},[1920],{"type":37,"value":1921},"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":1923,"children":1924},{},[1925,1927,1933,1935],{"type":37,"value":1926},"This isn't another glossary. If you want the plain-language definitions of staff augmentation versus outsourcing, we wrote that already — ",{"type":32,"tag":70,"props":1928,"children":1930},{"href":1929},"/blog/staff-augmentation-vs-outsourcing/",[1931],{"type":37,"value":1932},"start with our breakdown",{"type":37,"value":1934},". This post answers a different question: ",{"type":32,"tag":50,"props":1936,"children":1937},{},[1938],{"type":37,"value":1939},"which model fits a company at my stage, with my scope and my team?",{"type":32,"tag":86,"props":1941,"children":1943},{"id":1942},"first-this-isnt-about-definitions-its-about-fit",[1944],{"type":37,"value":1945},"First, This Isn't About Definitions — It's About Fit",{"type":32,"tag":33,"props":1947,"children":1948},{},[1949],{"type":37,"value":1950},"Here's the whole picture in a few sentences, so we're working from the same map.",{"type":32,"tag":33,"props":1952,"children":1953},{},[1954,1959],{"type":32,"tag":206,"props":1955,"children":1956},{},[1957],{"type":37,"value":1958},"Staff augmentation",{"type":37,"value":1960}," 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":1962,"children":1963},{},[1964,1969,1971,1976],{"type":32,"tag":206,"props":1965,"children":1966},{},[1967],{"type":37,"value":1968},"A dedicated team",{"type":37,"value":1970}," 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":50,"props":1972,"children":1973},{},[1974],{"type":37,"value":1975},"and",{"type":37,"value":1977}," the management that comes with it.",{"type":32,"tag":33,"props":1979,"children":1980},{},[1981,1986],{"type":32,"tag":206,"props":1982,"children":1983},{},[1984],{"type":37,"value":1985},"Project-based delivery",{"type":37,"value":1987}," 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":1989,"children":1990},{},[1991],{"type":37,"value":1992},"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":86,"props":1994,"children":1996},{"id":1995},"the-three-models-at-a-glance",[1997],{"type":37,"value":1998},"The Three Models at a Glance",{"type":32,"tag":2000,"props":2001,"children":2002},"table",{},[2003,2030],{"type":32,"tag":2004,"props":2005,"children":2006},"thead",{},[2007],{"type":32,"tag":2008,"props":2009,"children":2010},"tr",{},[2011,2015,2020,2025],{"type":32,"tag":2012,"props":2013,"children":2014},"th",{},[],{"type":32,"tag":2012,"props":2016,"children":2017},{},[2018],{"type":37,"value":2019},"Staff Augmentation",{"type":32,"tag":2012,"props":2021,"children":2022},{},[2023],{"type":37,"value":2024},"Dedicated Team",{"type":32,"tag":2012,"props":2026,"children":2027},{},[2028],{"type":37,"value":2029},"Project-Based / Fixed",{"type":32,"tag":2031,"props":2032,"children":2033},"tbody",{},[2034,2059,2085,2111,2137,2162],{"type":32,"tag":2008,"props":2035,"children":2036},{},[2037,2046,2050,2055],{"type":32,"tag":2038,"props":2039,"children":2040},"td",{},[2041],{"type":32,"tag":206,"props":2042,"children":2043},{},[2044],{"type":37,"value":2045},"Who manages delivery",{"type":32,"tag":2038,"props":2047,"children":2048},{},[2049],{"type":37,"value":875},{"type":32,"tag":2038,"props":2051,"children":2052},{},[2053],{"type":37,"value":2054},"The partner",{"type":32,"tag":2038,"props":2056,"children":2057},{},[2058],{"type":37,"value":2054},{"type":32,"tag":2008,"props":2060,"children":2061},{},[2062,2070,2075,2080],{"type":32,"tag":2038,"props":2063,"children":2064},{},[2065],{"type":32,"tag":206,"props":2066,"children":2067},{},[2068],{"type":37,"value":2069},"Control over the day-to-day",{"type":32,"tag":2038,"props":2071,"children":2072},{},[2073],{"type":37,"value":2074},"High",{"type":32,"tag":2038,"props":2076,"children":2077},{},[2078],{"type":37,"value":2079},"Shared",{"type":32,"tag":2038,"props":2081,"children":2082},{},[2083],{"type":37,"value":2084},"Low (you own the outcome, not the steering)",{"type":32,"tag":2008,"props":2086,"children":2087},{},[2088,2096,2101,2106],{"type":32,"tag":2038,"props":2089,"children":2090},{},[2091],{"type":32,"tag":206,"props":2092,"children":2093},{},[2094],{"type":37,"value":2095},"Cost shape",{"type":32,"tag":2038,"props":2097,"children":2098},{},[2099],{"type":37,"value":2100},"Predictable per-seat",{"type":32,"tag":2038,"props":2102,"children":2103},{},[2104],{"type":37,"value":2105},"Predictable monthly",{"type":32,"tag":2038,"props":2107,"children":2108},{},[2109],{"type":37,"value":2110},"Milestone or fixed",{"type":32,"tag":2008,"props":2112,"children":2113},{},[2114,2122,2127,2132],{"type":32,"tag":2038,"props":2115,"children":2116},{},[2117],{"type":32,"tag":206,"props":2118,"children":2119},{},[2120],{"type":37,"value":2121},"Best timeline",{"type":32,"tag":2038,"props":2123,"children":2124},{},[2125],{"type":37,"value":2126},"Short burst to ongoing",{"type":32,"tag":2038,"props":2128,"children":2129},{},[2130],{"type":37,"value":2131},"Long roadmap (years)",{"type":32,"tag":2038,"props":2133,"children":2134},{},[2135],{"type":37,"value":2136},"Defined, time-boxed",{"type":32,"tag":2008,"props":2138,"children":2139},{},[2140,2148,2153,2157],{"type":32,"tag":2038,"props":2141,"children":2142},{},[2143],{"type":32,"tag":206,"props":2144,"children":2145},{},[2146],{"type":37,"value":2147},"Scope certainty needed",{"type":32,"tag":2038,"props":2149,"children":2150},{},[2151],{"type":37,"value":2152},"Low — scope can flex",{"type":32,"tag":2038,"props":2154,"children":2155},{},[2156],{"type":37,"value":2152},{"type":32,"tag":2038,"props":2158,"children":2159},{},[2160],{"type":37,"value":2161},"High — scope must be stable",{"type":32,"tag":2008,"props":2163,"children":2164},{},[2165,2173,2178,2183],{"type":32,"tag":2038,"props":2166,"children":2167},{},[2168],{"type":32,"tag":206,"props":2169,"children":2170},{},[2171],{"type":37,"value":2172},"Best for",{"type":32,"tag":2038,"props":2174,"children":2175},{},[2176],{"type":37,"value":2177},"You have a tech lead and need capacity",{"type":32,"tag":2038,"props":2179,"children":2180},{},[2181],{"type":37,"value":2182},"You want to focus on strategy, not delivery",{"type":32,"tag":2038,"props":2184,"children":2185},{},[2186],{"type":37,"value":2187},"You have a clear, stable spec",{"type":32,"tag":33,"props":2189,"children":2190},{},[2191],{"type":37,"value":2192},"Read down the \"best for\" column first. That row usually tells you more than the rest of the table combined.",{"type":32,"tag":124,"props":2194,"children":2196},{"id":2195},"staff-augmentation",[2197],{"type":37,"value":2019},{"type":32,"tag":33,"props":2199,"children":2200},{},[2201,2203,2208],{"type":37,"value":2202},"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":50,"props":2204,"children":2205},{},[2206],{"type":37,"value":2207},"hands",{"type":37,"value":2209},". 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":124,"props":2211,"children":2213},{"id":2212},"dedicated-team",[2214],{"type":37,"value":2024},{"type":32,"tag":33,"props":2216,"children":2217},{},[2218],{"type":37,"value":2219},"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":124,"props":2221,"children":2223},{"id":2222},"project-based-fixed-delivery",[2224],{"type":37,"value":2225},"Project-Based / Fixed Delivery",{"type":32,"tag":33,"props":2227,"children":2228},{},[2229,2231,2236],{"type":37,"value":2230},"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":50,"props":2232,"children":2233},{},[2234],{"type":37,"value":2235},"does",{"type":37,"value":2237}," change.",{"type":32,"tag":86,"props":2239,"children":2241},{"id":2240},"the-two-questions-that-decide-it-and-two-more-everyone-forgets",[2242],{"type":37,"value":2243},"The Two Questions That Decide It (and Two More Everyone Forgets)",{"type":32,"tag":33,"props":2245,"children":2246},{},[2247],{"type":37,"value":2248},"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":124,"props":2250,"children":2252},{"id":2251},"how-certain-is-your-scope",[2253],{"type":37,"value":2254},"How certain is your scope?",{"type":32,"tag":33,"props":2256,"children":2257},{},[2258],{"type":37,"value":2259},"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":124,"props":2261,"children":2263},{"id":2262},"how-much-internal-management-capacity-can-you-give",[2264],{"type":37,"value":2265},"How much internal management capacity can you give?",{"type":32,"tag":33,"props":2267,"children":2268},{},[2269],{"type":37,"value":2270},"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":124,"props":2272,"children":2274},{"id":2273},"how-long-is-the-engagement",[2275],{"type":37,"value":2276},"How long is the engagement?",{"type":32,"tag":33,"props":2278,"children":2279},{},[2280],{"type":37,"value":2281},"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":124,"props":2283,"children":2285},{"id":2284},"what-budget-shape-do-you-need",[2286],{"type":37,"value":2287},"What budget shape do you need?",{"type":32,"tag":33,"props":2289,"children":2290},{},[2291],{"type":37,"value":2292},"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":86,"props":2294,"children":2296},{"id":2295},"the-honest-trade-offs-nobody-tells-you",[2297],{"type":37,"value":2298},"The Honest Trade-Offs Nobody Tells You",{"type":32,"tag":33,"props":2300,"children":2301},{},[2302],{"type":37,"value":2303},"Here's the part most comparison articles skip, because it complicates the sale.",{"type":32,"tag":33,"props":2305,"children":2306},{},[2307,2312],{"type":32,"tag":206,"props":2308,"children":2309},{},[2310],{"type":37,"value":2311},"Staff augmentation is cheapest up front — and not always cheapest over time.",{"type":37,"value":2313}," 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":2315,"children":2316},{},[2317,2329],{"type":32,"tag":206,"props":2318,"children":2319},{},[2320,2322,2327],{"type":37,"value":2321},"Fixed-price ",{"type":32,"tag":50,"props":2323,"children":2324},{},[2325],{"type":37,"value":2326},"feels",{"type":37,"value":2328}," the safest, and it's the most fragile.",{"type":37,"value":2330}," 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":2332,"children":2333},{},[2334,2339],{"type":32,"tag":206,"props":2335,"children":2336},{},[2337],{"type":37,"value":2338},"A dedicated team needs trust and a roadmap.",{"type":37,"value":2340}," 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":2342,"children":2343},{},[2344],{"type":37,"value":2345},"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":86,"props":2347,"children":2349},{"id":2348},"answer-these-4-questions-your-model",[2350],{"type":37,"value":2351},"Answer These 4 Questions → Your Model",{"type":32,"tag":33,"props":2353,"children":2354},{},[2355],{"type":37,"value":2356},"Run through these in order. The first answer that clearly fits is usually your model.",{"type":32,"tag":950,"props":2358,"children":2359},{},[2360,2377,2394,2408],{"type":32,"tag":202,"props":2361,"children":2362},{},[2363,2368,2370,2375],{"type":32,"tag":206,"props":2364,"children":2365},{},[2366],{"type":37,"value":2367},"Is your scope locked and stable?",{"type":37,"value":2369}," → Yes, and it won't move → ",{"type":32,"tag":206,"props":2371,"children":2372},{},[2373],{"type":37,"value":2374},"Project-based / fixed",{"type":37,"value":2376}," is viable.",{"type":32,"tag":202,"props":2378,"children":2379},{},[2380,2385,2387,2392],{"type":32,"tag":206,"props":2381,"children":2382},{},[2383],{"type":37,"value":2384},"Do you have a tech lead with capacity to manage engineers?",{"type":37,"value":2386}," → Yes → ",{"type":32,"tag":206,"props":2388,"children":2389},{},[2390],{"type":37,"value":2391},"Staff augmentation.",{"type":37,"value":2393}," No → keep going.",{"type":32,"tag":202,"props":2395,"children":2396},{},[2397,2402,2403],{"type":32,"tag":206,"props":2398,"children":2399},{},[2400],{"type":37,"value":2401},"Is this a multi-year build where you'd rather focus on strategy than run delivery?",{"type":37,"value":2386},{"type":32,"tag":206,"props":2404,"children":2405},{},[2406],{"type":37,"value":2407},"Dedicated team.",{"type":32,"tag":202,"props":2409,"children":2410},{},[2411,2415],{"type":32,"tag":206,"props":2412,"children":2413},{},[2414],{"type":37,"value":2287},{"type":37,"value":2416}," → Per-seat → staff aug. Predictable monthly → dedicated team. Fixed milestone → project-based.",{"type":32,"tag":33,"props":2418,"children":2419},{},[2420],{"type":37,"value":2421},"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":86,"props":2423,"children":2425},{"id":2424},"how-these-map-to-how-we-work",[2426],{"type":37,"value":2427},"How These Map to How We Work",{"type":32,"tag":33,"props":2429,"children":2430},{},[2431],{"type":37,"value":2432},"We offer all three models, and we'll tell you plainly which fits.",{"type":32,"tag":198,"props":2434,"children":2435},{},[2436,2447,2459,2469],{"type":32,"tag":202,"props":2437,"children":2438},{},[2439,2441,2446],{"type":37,"value":2440},"Need capacity around your own tech lead → ",{"type":32,"tag":70,"props":2442,"children":2443},{"href":1838},[2444],{"type":37,"value":2445},"resource augmentation",{"type":37,"value":498},{"type":32,"tag":202,"props":2448,"children":2449},{},[2450,2452,2458],{"type":37,"value":2451},"Building your first version → ",{"type":32,"tag":70,"props":2453,"children":2455},{"href":2454},"/services/mvp-development/",[2456],{"type":37,"value":2457},"MVP development",{"type":37,"value":498},{"type":32,"tag":202,"props":2460,"children":2461},{},[2462,2464,2468],{"type":37,"value":2463},"A defined project with a stable scope → ",{"type":32,"tag":70,"props":2465,"children":2466},{"href":493},[2467],{"type":37,"value":1079},{"type":37,"value":498},{"type":32,"tag":202,"props":2470,"children":2471},{},[2472,2474,2479],{"type":37,"value":2473},"Keeping something running and evolving → ",{"type":32,"tag":70,"props":2475,"children":2476},{"href":1084},[2477],{"type":37,"value":2478},"maintenance and support",{"type":37,"value":498},{"type":32,"tag":33,"props":2481,"children":2482},{},[2483,2485,2490],{"type":37,"value":2484},"But here's the part that matters more than any single mapping: ",{"type":32,"tag":206,"props":2486,"children":2487},{},[2488],{"type":37,"value":2489},"the model isn't a cage.",{"type":37,"value":2491}," You're not locked into the one you start with.",{"type":32,"tag":33,"props":2493,"children":2494},{},[2495,2499],{"type":32,"tag":70,"props":2496,"children":2497},{"href":319},[2498],{"type":37,"value":322},{"type":37,"value":2500}," 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":2502,"children":2503},{},[2504,2508],{"type":32,"tag":70,"props":2505,"children":2506},{"href":335},[2507],{"type":37,"value":338},{"type":37,"value":2509}," 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":2511,"children":2512},{},[2513],{"type":37,"value":2514},"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":86,"props":2516,"children":2518},{"id":2517},"once-youve-picked-a-model-pick-a-partner-wholl-stay",[2519],{"type":37,"value":2520},"Once You've Picked a Model, Pick a Partner Who'll Stay",{"type":32,"tag":33,"props":2522,"children":2523},{},[2524,2526,2531,2533,2537],{"type":37,"value":2525},"The model is the ",{"type":32,"tag":50,"props":2527,"children":2528},{},[2529],{"type":37,"value":2530},"structure",{"type":37,"value":2532}," of the relationship. It's only half the decision. The other half is ",{"type":32,"tag":50,"props":2534,"children":2535},{},[2536],{"type":37,"value":82},{"type":37,"value":2538}," 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":2540,"children":2541},{},[2542,2544,2548],{"type":37,"value":2543},"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":70,"props":2545,"children":2546},{"href":1050},[2547],{"type":37,"value":1053},{"type":37,"value":498},{"type":32,"tag":33,"props":2550,"children":2551},{},[2552,2554,2558,2560,2565],{"type":37,"value":2553},"It's also worth knowing how to engage one developer versus a team — our take on ",{"type":32,"tag":70,"props":2555,"children":2556},{"href":447},[2557],{"type":37,"value":1807},{"type":37,"value":2559}," covers that — and what kind of team you actually want, in ",{"type":32,"tag":70,"props":2561,"children":2562},{"href":439},[2563],{"type":37,"value":2564},"code shop versus product engineering team",{"type":37,"value":498},{"type":32,"tag":86,"props":2567,"children":2569},{"id":2568},"not-sure-which-model-fits",[2570],{"type":37,"value":2571},"Not Sure Which Model Fits?",{"type":32,"tag":33,"props":2573,"children":2574},{},[2575],{"type":37,"value":2576},"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":2578,"children":2579},{},[2580,2584,2586,2590],{"type":32,"tag":70,"props":2581,"children":2582},{"href":477},[2583],{"type":37,"value":480},{"type":37,"value":2585},", or read more about how we ",{"type":32,"tag":70,"props":2587,"children":2588},{"href":1838},[2589],{"type":37,"value":1841},{"type":37,"value":498},{"type":32,"tag":500,"props":2592,"children":2593},{},[],{"type":32,"tag":33,"props":2595,"children":2596},{},[2597],{"type":32,"tag":50,"props":2598,"children":2599},{},[2600,2601,2606,2607,2611,2612],{"type":37,"value":510},{"type":32,"tag":70,"props":2602,"children":2603},{"href":1929},[2604],{"type":37,"value":2605},"Staff Augmentation vs Outsourcing: What's the Difference?",{"type":37,"value":517},{"type":32,"tag":70,"props":2608,"children":2609},{"href":1050},[2610],{"type":37,"value":8},{"type":37,"value":517},{"type":32,"tag":70,"props":2613,"children":2614},{"href":1189},[2615],{"type":37,"value":1857},{"title":7,"searchDepth":530,"depth":530,"links":2617},[2618,2619,2624,2630,2631,2632,2633,2634],{"id":1942,"depth":530,"text":1945},{"id":1995,"depth":530,"text":1998,"children":2620},[2621,2622,2623],{"id":2195,"depth":536,"text":2019},{"id":2212,"depth":536,"text":2024},{"id":2222,"depth":536,"text":2225},{"id":2240,"depth":530,"text":2243,"children":2625},[2626,2627,2628,2629],{"id":2251,"depth":536,"text":2254},{"id":2262,"depth":536,"text":2265},{"id":2273,"depth":536,"text":2276},{"id":2284,"depth":536,"text":2287},{"id":2295,"depth":530,"text":2298},{"id":2348,"depth":530,"text":2351},{"id":2424,"depth":530,"text":2427},{"id":2517,"depth":530,"text":2520},{"id":2568,"depth":530,"text":2571},"content:blog:engagement-models.md","blog/engagement-models.md","blog/engagement-models",{"_path":2639,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2640,"description":2641,"topic":2642,"author":11,"authorProfile":12,"coverImg":2643,"coverImgAlt":2644,"published":15,"toc":15,"readingTime":16,"createdAt":2645,"updatedAt":2645,"keywords":2646,"body":2655,"_type":547,"_id":3177,"_source":549,"_file":3178,"_stem":3179,"_extension":552},"/blog/when-not-to-build-an-mvp","When NOT to Build an MVP: Signs You're Not Ready","We build MVPs for a living — and sometimes we tell founders to wait. Here are the honest signs you're not ready, and cheaper ways to test your idea first.","MVP Development","/images/blog/when-not-to-build-an-mvp.webp","When not to build an MVP — signs you're not ready, from the team that builds them","2026-05-04",[2647,2648,2649,2650,2651,2652,2653,2654],"when not to build an MVP","signs you're not ready to build an MVP","should I build an MVP","do I need an MVP","MVP mistakes to avoid","validate startup idea before building","alternatives to building an MVP","when is an MVP a bad idea",{"type":29,"children":2656,"toc":3166},[2657,2662,2672,2677,2696,2701,2707,2712,2722,2727,2732,2738,2743,2755,2760,2765,2771,2776,2788,2793,2798,2804,2809,2827,2839,2845,2855,2860,2903,2923,2928,2934,2939,2944,2949,2955,2960,2965,3018,3045,3063,3074,3080,3085,3103,3108,3113,3119,3124,3140,3143],{"type":32,"tag":33,"props":2658,"children":2659},{},[2660],{"type":37,"value":2661},"We build MVPs for a living. So you'd expect us to tell you to build one. Most of the time, we will.",{"type":32,"tag":33,"props":2663,"children":2664},{},[2665,2667],{"type":37,"value":2666},"But not always. Sometimes the most honest thing we can say to a founder is: ",{"type":32,"tag":50,"props":2668,"children":2669},{},[2670],{"type":37,"value":2671},"not yet.",{"type":32,"tag":33,"props":2673,"children":2674},{},[2675],{"type":37,"value":2676},"That's an odd thing for an MVP team to put in writing, and we know it. It would be easier — and more profitable in the short term — to take every project that walks in the door. We don't, because we've seen what happens when a founder spends their seed money building the wrong thing. The product ships, nobody shows up, and the runway's gone. We'd rather lose a project than be part of that story.",{"type":32,"tag":33,"props":2678,"children":2679},{},[2680,2682,2687,2689,2694],{"type":37,"value":2681},"Here's the number that sits behind all of this: roughly ",{"type":32,"tag":206,"props":2683,"children":2684},{},[2685],{"type":37,"value":2686},"42% of startups fail because there was no real market need for what they built.",{"type":37,"value":2688}," An MVP doesn't fix that. Building faster doesn't fix that. Only one thing does — finding out whether people actually want the thing ",{"type":32,"tag":50,"props":2690,"children":2691},{},[2692],{"type":37,"value":2693},"before",{"type":37,"value":2695}," you pour months and a chunk of your runway into it.",{"type":32,"tag":33,"props":2697,"children":2698},{},[2699],{"type":37,"value":2700},"So before you build, run through these six signs. If any of them sound like you, you might not be ready — and we'll show you cheaper ways to get there. None of this is anti-building. It's pro-building-the-right-thing.",{"type":32,"tag":86,"props":2702,"children":2704},{"id":2703},"sign-1-you-cant-say-what-youre-testing-in-one-sentence",[2705],{"type":37,"value":2706},"Sign 1 — You Can't Say What You're Testing in One Sentence",{"type":32,"tag":33,"props":2708,"children":2709},{},[2710],{"type":37,"value":2711},"An MVP is an experiment, not a product. And an experiment without a hypothesis is just spending.",{"type":32,"tag":33,"props":2713,"children":2714},{},[2715,2717],{"type":37,"value":2716},"Try to finish this sentence: ",{"type":32,"tag":50,"props":2718,"children":2719},{},[2720],{"type":37,"value":2721},"\"I'm building this to find out whether ___, and I'll know I'm right if ___.\"",{"type":32,"tag":33,"props":2723,"children":2724},{},[2725],{"type":37,"value":2726},"If you can't fill in both blanks cleanly, you're not ready to build — you're ready to think. \"I want to see what happens\" isn't a hypothesis. \"I want to find out if freelancers will pay $20 a month to automate invoice reminders, and I'll know if 30 of them subscribe in the first month\" is.",{"type":32,"tag":33,"props":2728,"children":2729},{},[2730],{"type":37,"value":2731},"The one-sentence test is unforgiving on purpose. If the thing you're testing won't fit in a sentence, it won't fit in a focused MVP either — and you'll end up building five experiments at once and learning from none of them.",{"type":32,"tag":86,"props":2733,"children":2735},{"id":2734},"sign-2-you-havent-talked-to-enough-real-users",[2736],{"type":37,"value":2737},"Sign 2 — You Haven't Talked to Enough Real Users",{"type":32,"tag":33,"props":2739,"children":2740},{},[2741],{"type":37,"value":2742},"This is the most common reason founders aren't ready, and the hardest to admit — because skipping it feels like progress.",{"type":32,"tag":33,"props":2744,"children":2745},{},[2746,2748,2753],{"type":37,"value":2747},"Here's the test: have you sat down with at least 20 people in your target audience and ",{"type":32,"tag":50,"props":2749,"children":2750},{},[2751],{"type":37,"value":2752},"listened",{"type":37,"value":2754}," — without pitching them? Not \"showed them your deck and watched them nod politely.\" Listened. Asked about the problem. Found out how they solve it today, what they've tried, what they'd pay to make it go away.",{"type":32,"tag":33,"props":2756,"children":2757},{},[2758],{"type":37,"value":2759},"If you haven't, building is the most expensive form of procrastination there is. It feels productive. You're shipping code, you're making progress, you're avoiding the genuinely uncomfortable work of finding out whether strangers care about your idea. But code can't tell you something twenty honest conversations would have told you for free.",{"type":32,"tag":33,"props":2761,"children":2762},{},[2763],{"type":37,"value":2764},"Talk to the users first. They'll either confirm you're onto something or save you a build.",{"type":32,"tag":86,"props":2766,"children":2768},{"id":2767},"sign-3-you-havent-defined-what-success-looks-like",[2769],{"type":37,"value":2770},"Sign 3 — You Haven't Defined What Success Looks Like",{"type":32,"tag":33,"props":2772,"children":2773},{},[2774],{"type":37,"value":2775},"\"Let's launch and see what happens\" is how founders spend $40,000 and learn nothing.",{"type":32,"tag":33,"props":2777,"children":2778},{},[2779,2781,2786],{"type":37,"value":2780},"Before you build, tie your MVP to one or two measurable learning goals. Not revenue goals — ",{"type":32,"tag":50,"props":2782,"children":2783},{},[2784],{"type":37,"value":2785},"learning",{"type":37,"value":2787}," goals. What number, after launch, would tell you the hypothesis is working? What number would tell you it's time to change course?",{"type":32,"tag":33,"props":2789,"children":2790},{},[2791],{"type":37,"value":2792},"For the invoice-reminder example: \"100 freelancers sign up in month one, and 30% of them connect a real account.\" Those numbers mean something. You can look at them in six weeks and make a real decision. \"See what happens\" gives you a launch and a shrug.",{"type":32,"tag":33,"props":2794,"children":2795},{},[2796],{"type":37,"value":2797},"If you don't know what success looks like, you won't recognize it when it arrives — or notice when it doesn't. Define it before you build, while you're still honest with yourself.",{"type":32,"tag":86,"props":2799,"children":2801},{"id":2800},"sign-4-youre-trying-to-build-everything",[2802],{"type":37,"value":2803},"Sign 4 — You're Trying to Build Everything",{"type":32,"tag":33,"props":2805,"children":2806},{},[2807],{"type":37,"value":2808},"If your \"minimum viable product\" has fifteen features, it's neither minimum nor an experiment. It's a v1 you can't afford yet.",{"type":32,"tag":33,"props":2810,"children":2811},{},[2812,2814,2819,2821,2825],{"type":37,"value":2813},"Feature creep before launch is a tell that you haven't decided what you're actually testing. Every feature is a hedge — \"but what if they want ",{"type":32,"tag":50,"props":2815,"children":2816},{},[2817],{"type":37,"value":2818},"this",{"type":37,"value":2820}," too?\" — and a pile of hedges is just an expensive way of admitting you're not sure. An MVP tests one risky assumption. One. Everything else can wait for the version you build ",{"type":32,"tag":50,"props":2822,"children":2823},{},[2824],{"type":37,"value":139},{"type":37,"value":2826}," you've proven the assumption holds.",{"type":32,"tag":33,"props":2828,"children":2829},{},[2830,2832,2837],{"type":37,"value":2831},"The good news: if you genuinely are ready and the problem is just that your scope is too big, that's fixable. Here's ",{"type":32,"tag":70,"props":2833,"children":2834},{"href":1797},[2835],{"type":37,"value":2836},"how to scope a software project down to its essential first build",{"type":37,"value":2838}," before you spend a dollar. Cutting the scope is often the difference between \"not ready\" and \"ready.\"",{"type":32,"tag":86,"props":2840,"children":2842},{"id":2841},"sign-5-a-cheaper-test-would-answer-your-question",[2843],{"type":37,"value":2844},"Sign 5 — A Cheaper Test Would Answer Your Question",{"type":32,"tag":33,"props":2846,"children":2847},{},[2848,2850],{"type":37,"value":2849},"This is the big one, and the most useful. Before you commit to a build, ask: ",{"type":32,"tag":50,"props":2851,"children":2852},{},[2853],{"type":37,"value":2854},"is there a cheaper experiment that would answer the same question?",{"type":32,"tag":33,"props":2856,"children":2857},{},[2858],{"type":37,"value":2859},"Very often there is. Building software is one of the most expensive ways to test an idea, and it's rarely the first thing you should reach for. Here are four alternatives, roughly in order of cost, with honest math:",{"type":32,"tag":198,"props":2861,"children":2862},{},[2863,2873,2883,2893],{"type":32,"tag":202,"props":2864,"children":2865},{},[2866,2871],{"type":32,"tag":206,"props":2867,"children":2868},{},[2869],{"type":37,"value":2870},"Customer interviews — free, highest signal.",{"type":37,"value":2872}," Twenty real conversations cost you nothing but time and the discomfort of asking. They'll tell you more about whether your idea has legs than the first month of a build ever could.",{"type":32,"tag":202,"props":2874,"children":2875},{},[2876,2881],{"type":32,"tag":206,"props":2877,"children":2878},{},[2879],{"type":37,"value":2880},"A landing page plus a little ad spend — $200 to $500.",{"type":37,"value":2882}," Put up a one-page site describing the product, add a \"sign up for early access\" button, and send some targeted ads at it. Real strangers either click and sign up or they don't. That's a demand signal, bought for a few hundred dollars.",{"type":32,"tag":202,"props":2884,"children":2885},{},[2886,2891],{"type":32,"tag":206,"props":2887,"children":2888},{},[2889],{"type":37,"value":2890},"A concierge or manual MVP — your own labor.",{"type":37,"value":2892}," Deliver the value by hand before you automate any of it. Airbnb's founders started by literally renting out air mattresses in their own apartment — no platform, no app, just the bare service. If you can't deliver the value manually to ten people, software won't save you. If you can, you've learned exactly what to build.",{"type":32,"tag":202,"props":2894,"children":2895},{},[2896,2901],{"type":32,"tag":206,"props":2897,"children":2898},{},[2899],{"type":37,"value":2900},"Pre-sales or deposits — the strongest signal there is.",{"type":37,"value":2902}," Ask people to pay before the product exists. A deposit, a pre-order, a paid pilot. Nothing separates \"I love this idea\" from \"I'll actually pay for this\" like asking for money. It's the highest-confidence validation you can get.",{"type":32,"tag":33,"props":2904,"children":2905},{},[2906,2908,2913,2915,2921],{"type":37,"value":2907},"Now the comparison that matters. A typical MVP runs ",{"type":32,"tag":206,"props":2909,"children":2910},{},[2911],{"type":37,"value":2912},"$15,000 to $50,000 and takes two to four months",{"type":37,"value":2914}," to build — ",{"type":32,"tag":70,"props":2916,"children":2918},{"href":2917},"/blog/mvp-development-cost/",[2919],{"type":37,"value":2920},"here's the full cost breakdown",{"type":37,"value":2922},". Two to four weeks and roughly $1,000 to $2,000 of validation can tell you whether that build is worth starting. The validation isn't a delay. It's insurance on the most expensive bet you're about to make.",{"type":32,"tag":33,"props":2924,"children":2925},{},[2926],{"type":37,"value":2927},"If a $300 landing page would answer your question, run the landing page first. The MVP will still be there next month — and you'll build a much better one for having waited.",{"type":32,"tag":86,"props":2929,"children":2931},{"id":2930},"sign-6-youre-building-to-raise-not-to-learn",[2932],{"type":37,"value":2933},"Sign 6 — You're Building to Raise, Not to Learn",{"type":32,"tag":33,"props":2935,"children":2936},{},[2937],{"type":37,"value":2938},"Some founders don't really want an MVP. They want a demo to wave at investors. The build becomes a prop.",{"type":32,"tag":33,"props":2940,"children":2941},{},[2942],{"type":37,"value":2943},"We understand the pressure. But a polished demo with no validation underneath it is a fragile foundation, and good investors can feel the hollowness. What they actually want isn't polish — it's evidence of demand. Twenty users who signed up. Ten who paid a deposit. A waitlist that grew without you begging. Those are worth more in a pitch than the slickest demo of a product nobody's asked for.",{"type":32,"tag":33,"props":2945,"children":2946},{},[2947],{"type":37,"value":2948},"Build to learn, and the fundraising story writes itself. Build to raise, and you've built a beautiful answer to a question no investor was really asking.",{"type":32,"tag":86,"props":2950,"children":2952},{"id":2951},"when-you-are-ready-and-what-comes-next",[2953],{"type":37,"value":2954},"When You ARE Ready (And What Comes Next)",{"type":32,"tag":33,"props":2956,"children":2957},{},[2958],{"type":37,"value":2959},"We've spent six sections on the brakes. Here's the green light — because most founders reading this are closer than they fear.",{"type":32,"tag":33,"props":2961,"children":2962},{},[2963],{"type":37,"value":2964},"You're ready to build an MVP when you can check these:",{"type":32,"tag":198,"props":2966,"children":2969},{"className":2967},[2968],"contains-task-list",[2970,2982,2991,3000,3009],{"type":32,"tag":202,"props":2971,"children":2974},{"className":2972},[2973],"task-list-item",[2975,2980],{"type":32,"tag":2976,"props":2977,"children":2979},"input",{"disabled":15,"type":2978},"checkbox",[],{"type":37,"value":2981}," You can state your hypothesis in one sentence.",{"type":32,"tag":202,"props":2983,"children":2985},{"className":2984},[2973],[2986,2989],{"type":32,"tag":2976,"props":2987,"children":2988},{"disabled":15,"type":2978},[],{"type":37,"value":2990}," You've had at least 20 real conversations with your target users.",{"type":32,"tag":202,"props":2992,"children":2994},{"className":2993},[2973],[2995,2998],{"type":32,"tag":2976,"props":2996,"children":2997},{"disabled":15,"type":2978},[],{"type":37,"value":2999}," You've defined one or two measurable signs of success.",{"type":32,"tag":202,"props":3001,"children":3003},{"className":3002},[2973],[3004,3007],{"type":32,"tag":2976,"props":3005,"children":3006},{"disabled":15,"type":2978},[],{"type":37,"value":3008}," You've cut the scope to the one assumption that matters most.",{"type":32,"tag":202,"props":3010,"children":3012},{"className":3011},[2973],[3013,3016],{"type":32,"tag":2976,"props":3014,"children":3015},{"disabled":15,"type":2978},[],{"type":37,"value":3017}," You have evidence that someone has a problem worth paying to solve.",{"type":32,"tag":33,"props":3019,"children":3020},{},[3021,3023,3028,3030,3035,3037,3043],{"type":37,"value":3022},"If that's you, stop reading and go build — but build it right. Start with ",{"type":32,"tag":70,"props":3024,"children":3025},{"href":1797},[3026],{"type":37,"value":3027},"a tight scope",{"type":37,"value":3029},", price it honestly with ",{"type":32,"tag":70,"props":3031,"children":3032},{"href":2917},[3033],{"type":37,"value":3034},"our MVP cost guide",{"type":37,"value":3036},", then follow ",{"type":32,"tag":70,"props":3038,"children":3040},{"href":3039},"/blog/mvp-development-process/",[3041],{"type":37,"value":3042},"the eight-week build process",{"type":37,"value":3044}," that turns a validated idea into a working product.",{"type":32,"tag":33,"props":3046,"children":3047},{},[3048,3050,3054,3056,3061],{"type":37,"value":3049},"This is exactly the path ",{"type":32,"tag":70,"props":3051,"children":3052},{"href":335},[3053],{"type":37,"value":338},{"type":37,"value":3055}," took. They came to us ",{"type":32,"tag":50,"props":3057,"children":3058},{},[3059],{"type":37,"value":3060},"ready",{"type":37,"value":3062}," — a clear problem, a real market need they'd already confirmed. There was nothing to second-guess. So we scoped it tight and shipped their MVP in three months. They raised funding, and we've been building together for more than two years since. Readiness is the whole reason that timeline held. Eitoss is what \"you're ready\" looks like — and proof that the wait, when it's needed, pays off.",{"type":32,"tag":33,"props":3064,"children":3065},{},[3066,3068,3072],{"type":37,"value":3067},"We've sat on the founder's side of this table too. Before we committed our own team to building ",{"type":32,"tag":70,"props":3069,"children":3070},{"href":920},[3071],{"type":37,"value":923},{"type":37,"value":3073},", our own SaaS product, we pressure-tested the idea first — because betting your own money on an unvalidated guess is exactly as painful as it sounds. That product is live and growing today, with a 4.7 rating. It got there because we did the validation before the build, not after.",{"type":32,"tag":86,"props":3075,"children":3077},{"id":3076},"why-wed-rather-tell-you-to-wait",[3078],{"type":37,"value":3079},"Why We'd Rather Tell You to Wait",{"type":32,"tag":33,"props":3081,"children":3082},{},[3083],{"type":37,"value":3084},"Here's the part that probably explains this whole article.",{"type":32,"tag":33,"props":3086,"children":3087},{},[3088,3090,3095,3096,3101],{"type":37,"value":3089},"We're not interested in one-off projects. We're interested in partnerships — clients who ship something real, see it work, and keep building with us for years. ",{"type":32,"tag":70,"props":3091,"children":3092},{"href":335},[3093],{"type":37,"value":3094},"Eitoss has been with us for over two years.",{"type":37,"value":870},{"type":32,"tag":70,"props":3097,"children":3098},{"href":1838},[3099],{"type":37,"value":3100},"PerformLine grew from one engineer to eight-plus over two years.",{"type":37,"value":3102}," Those relationships don't start with us taking a check to build the wrong thing.",{"type":32,"tag":33,"props":3104,"children":3105},{},[3106],{"type":37,"value":3107},"If we build something the market doesn't want, two things happen: you burn your runway, and we burn your trust. We'd rather tell you to validate first, watch you come back when you're ready, and build something that actually works. That's not generosity. It's just the long game — and it's the only game we play.",{"type":32,"tag":33,"props":3109,"children":3110},{},[3111],{"type":37,"value":3112},"So we'll tell you honestly what you need, and what can wait. Not to bill less, but so you don't burn your runway on the wrong thing.",{"type":32,"tag":86,"props":3114,"children":3116},{"id":3115},"not-sure-if-youre-ready",[3117],{"type":37,"value":3118},"Not Sure If You're Ready?",{"type":32,"tag":33,"props":3120,"children":3121},{},[3122],{"type":37,"value":3123},"Talk to us. We'll give you an honest read — build now, validate first, or wait — no commitment. If the answer is \"you're ready,\" we'll help you scope it. If it's \"test this cheaper first,\" we'll tell you exactly how. Either way, you'll leave the conversation knowing more than you came in with.",{"type":32,"tag":33,"props":3125,"children":3126},{},[3127,3132,3134,3139],{"type":32,"tag":70,"props":3128,"children":3129},{"href":477},[3130],{"type":37,"value":3131},"Book an honest assessment",{"type":37,"value":3133},", or read more about ",{"type":32,"tag":70,"props":3135,"children":3136},{"href":2454},[3137],{"type":37,"value":3138},"how we approach MVP development",{"type":37,"value":498},{"type":32,"tag":500,"props":3141,"children":3142},{},[],{"type":32,"tag":33,"props":3144,"children":3145},{},[3146],{"type":32,"tag":50,"props":3147,"children":3148},{},[3149,3150,3155,3156,3161,3162],{"type":37,"value":510},{"type":32,"tag":70,"props":3151,"children":3152},{"href":1797},[3153],{"type":37,"value":3154},"How to Scope a Software Project Before You Spend a Dollar",{"type":37,"value":517},{"type":32,"tag":70,"props":3157,"children":3158},{"href":2917},[3159],{"type":37,"value":3160},"How Much Does MVP Development Cost in 2026?",{"type":37,"value":517},{"type":32,"tag":70,"props":3163,"children":3164},{"href":920},[3165],{"type":37,"value":1122},{"title":7,"searchDepth":530,"depth":530,"links":3167},[3168,3169,3170,3171,3172,3173,3174,3175,3176],{"id":2703,"depth":530,"text":2706},{"id":2734,"depth":530,"text":2737},{"id":2767,"depth":530,"text":2770},{"id":2800,"depth":530,"text":2803},{"id":2841,"depth":530,"text":2844},{"id":2930,"depth":530,"text":2933},{"id":2951,"depth":530,"text":2954},{"id":3076,"depth":530,"text":3079},{"id":3115,"depth":530,"text":3118},"content:blog:when-not-to-build-an-mvp.md","blog/when-not-to-build-an-mvp.md","blog/when-not-to-build-an-mvp",{"_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":3181,"body":3182,"_type":547,"_id":548,"_source":549,"_file":550,"_stem":551,"_extension":552},[19,20,21,22,23,24,25,26,27],{"type":29,"children":3183,"toc":3547},[3184,3188,3192,3201,3220,3224,3228,3232,3240,3244,3248,3252,3261,3265,3269,3273,3277,3281,3285,3289,3293,3297,3301,3349,3353,3357,3366,3370,3379,3383,3387,3399,3411,3420,3424,3428,3432,3436,3440,3459,3473,3497,3501,3505,3523,3526],{"type":32,"tag":33,"props":3185,"children":3186},{},[3187],{"type":37,"value":38},{"type":32,"tag":33,"props":3189,"children":3190},{},[3191],{"type":37,"value":43},{"type":32,"tag":33,"props":3193,"children":3194},{},[3195,3196,3200],{"type":37,"value":48},{"type":32,"tag":50,"props":3197,"children":3198},{},[3199],{"type":37,"value":54},{"type":37,"value":56},{"type":32,"tag":33,"props":3202,"children":3203},{},[3204,3205,3209,3210,3214,3215,3219],{"type":37,"value":61},{"type":32,"tag":50,"props":3206,"children":3207},{},[3208],{"type":37,"value":66},{"type":37,"value":68},{"type":32,"tag":70,"props":3211,"children":3212},{"href":72},[3213],{"type":37,"value":75},{"type":37,"value":77},{"type":32,"tag":50,"props":3216,"children":3217},{},[3218],{"type":37,"value":82},{"type":37,"value":84},{"type":32,"tag":86,"props":3221,"children":3222},{"id":88},[3223],{"type":37,"value":91},{"type":32,"tag":33,"props":3225,"children":3226},{},[3227],{"type":37,"value":96},{"type":32,"tag":33,"props":3229,"children":3230},{},[3231],{"type":37,"value":101},{"type":32,"tag":33,"props":3233,"children":3234},{},[3235,3236],{"type":37,"value":106},{"type":32,"tag":50,"props":3237,"children":3238},{},[3239],{"type":37,"value":111},{"type":32,"tag":86,"props":3241,"children":3242},{"id":114},[3243],{"type":37,"value":117},{"type":32,"tag":33,"props":3245,"children":3246},{},[3247],{"type":37,"value":122},{"type":32,"tag":124,"props":3249,"children":3250},{"id":126},[3251],{"type":37,"value":129},{"type":32,"tag":33,"props":3253,"children":3254},{},[3255,3256,3260],{"type":37,"value":134},{"type":32,"tag":50,"props":3257,"children":3258},{},[3259],{"type":37,"value":139},{"type":37,"value":141},{"type":32,"tag":124,"props":3262,"children":3263},{"id":144},[3264],{"type":37,"value":147},{"type":32,"tag":33,"props":3266,"children":3267},{},[3268],{"type":37,"value":152},{"type":32,"tag":124,"props":3270,"children":3271},{"id":155},[3272],{"type":37,"value":158},{"type":32,"tag":33,"props":3274,"children":3275},{},[3276],{"type":37,"value":163},{"type":32,"tag":124,"props":3278,"children":3279},{"id":166},[3280],{"type":37,"value":169},{"type":32,"tag":33,"props":3282,"children":3283},{},[3284],{"type":37,"value":174},{"type":32,"tag":124,"props":3286,"children":3287},{"id":177},[3288],{"type":37,"value":180},{"type":32,"tag":33,"props":3290,"children":3291},{},[3292],{"type":37,"value":185},{"type":32,"tag":86,"props":3294,"children":3295},{"id":188},[3296],{"type":37,"value":191},{"type":32,"tag":33,"props":3298,"children":3299},{},[3300],{"type":37,"value":196},{"type":32,"tag":198,"props":3302,"children":3303},{},[3304,3312,3320,3333,3341],{"type":32,"tag":202,"props":3305,"children":3306},{},[3307,3311],{"type":32,"tag":206,"props":3308,"children":3309},{},[3310],{"type":37,"value":210},{"type":37,"value":212},{"type":32,"tag":202,"props":3313,"children":3314},{},[3315,3319],{"type":32,"tag":206,"props":3316,"children":3317},{},[3318],{"type":37,"value":220},{"type":37,"value":222},{"type":32,"tag":202,"props":3321,"children":3322},{},[3323,3332],{"type":32,"tag":206,"props":3324,"children":3325},{},[3326,3327,3331],{"type":37,"value":230},{"type":32,"tag":50,"props":3328,"children":3329},{},[3330],{"type":37,"value":235},{"type":37,"value":237},{"type":37,"value":239},{"type":32,"tag":202,"props":3334,"children":3335},{},[3336,3340],{"type":32,"tag":206,"props":3337,"children":3338},{},[3339],{"type":37,"value":247},{"type":37,"value":249},{"type":32,"tag":202,"props":3342,"children":3343},{},[3344,3348],{"type":32,"tag":206,"props":3345,"children":3346},{},[3347],{"type":37,"value":257},{"type":37,"value":259},{"type":32,"tag":33,"props":3350,"children":3351},{},[3352],{"type":37,"value":264},{"type":32,"tag":86,"props":3354,"children":3355},{"id":267},[3356],{"type":37,"value":270},{"type":32,"tag":33,"props":3358,"children":3359},{},[3360,3361,3365],{"type":37,"value":275},{"type":32,"tag":50,"props":3362,"children":3363},{},[3364],{"type":37,"value":280},{"type":37,"value":282},{"type":32,"tag":33,"props":3367,"children":3368},{},[3369],{"type":37,"value":287},{"type":32,"tag":33,"props":3371,"children":3372},{},[3373,3374,3378],{"type":37,"value":292},{"type":32,"tag":50,"props":3375,"children":3376},{},[3377],{"type":37,"value":297},{"type":37,"value":299},{"type":32,"tag":86,"props":3380,"children":3381},{"id":302},[3382],{"type":37,"value":305},{"type":32,"tag":33,"props":3384,"children":3385},{},[3386],{"type":37,"value":310},{"type":32,"tag":33,"props":3388,"children":3389},{},[3390,3398],{"type":32,"tag":206,"props":3391,"children":3392},{},[3393,3397],{"type":32,"tag":70,"props":3394,"children":3395},{"href":319},[3396],{"type":37,"value":322},{"type":37,"value":324},{"type":37,"value":326},{"type":32,"tag":33,"props":3400,"children":3401},{},[3402,3410],{"type":32,"tag":206,"props":3403,"children":3404},{},[3405,3409],{"type":32,"tag":70,"props":3406,"children":3407},{"href":335},[3408],{"type":37,"value":338},{"type":37,"value":340},{"type":37,"value":342},{"type":32,"tag":33,"props":3412,"children":3413},{},[3414,3415,3419],{"type":37,"value":347},{"type":32,"tag":50,"props":3416,"children":3417},{},[3418],{"type":37,"value":139},{"type":37,"value":353},{"type":32,"tag":86,"props":3421,"children":3422},{"id":356},[3423],{"type":37,"value":359},{"type":32,"tag":33,"props":3425,"children":3426},{},[3427],{"type":37,"value":364},{"type":32,"tag":33,"props":3429,"children":3430},{},[3431],{"type":37,"value":369},{"type":32,"tag":33,"props":3433,"children":3434},{},[3435],{"type":37,"value":374},{"type":32,"tag":86,"props":3437,"children":3438},{"id":377},[3439],{"type":37,"value":380},{"type":32,"tag":33,"props":3441,"children":3442},{},[3443,3444,3448,3449,3453,3454,3458],{"type":37,"value":385},{"type":32,"tag":50,"props":3445,"children":3446},{},[3447],{"type":37,"value":390},{"type":37,"value":392},{"type":32,"tag":50,"props":3450,"children":3451},{},[3452],{"type":37,"value":82},{"type":37,"value":398},{"type":32,"tag":70,"props":3455,"children":3456},{"href":72},[3457],{"type":37,"value":75},{"type":37,"value":404},{"type":32,"tag":33,"props":3460,"children":3461},{},[3462,3463,3467,3468,3472],{"type":37,"value":409},{"type":32,"tag":50,"props":3464,"children":3465},{},[3466],{"type":37,"value":414},{"type":37,"value":416},{"type":32,"tag":70,"props":3469,"children":3470},{"href":419},[3471],{"type":37,"value":422},{"type":37,"value":424},{"type":32,"tag":33,"props":3474,"children":3475},{},[3476,3477,3481,3482,3486,3487,3491,3492,3496],{"type":37,"value":429},{"type":32,"tag":50,"props":3478,"children":3479},{},[3480],{"type":37,"value":434},{"type":37,"value":436},{"type":32,"tag":70,"props":3483,"children":3484},{"href":439},[3485],{"type":37,"value":442},{"type":37,"value":444},{"type":32,"tag":70,"props":3488,"children":3489},{"href":447},[3490],{"type":37,"value":450},{"type":37,"value":452},{"type":32,"tag":70,"props":3493,"children":3494},{"href":455},[3495],{"type":37,"value":458},{"type":37,"value":460},{"type":32,"tag":86,"props":3498,"children":3499},{"id":463},[3500],{"type":37,"value":466},{"type":32,"tag":33,"props":3502,"children":3503},{},[3504],{"type":37,"value":471},{"type":32,"tag":33,"props":3506,"children":3507},{},[3508,3512,3513,3517,3518,3522],{"type":32,"tag":70,"props":3509,"children":3510},{"href":477},[3511],{"type":37,"value":480},{"type":37,"value":482},{"type":32,"tag":70,"props":3514,"children":3515},{"href":485},[3516],{"type":37,"value":488},{"type":37,"value":490},{"type":32,"tag":70,"props":3519,"children":3520},{"href":493},[3521],{"type":37,"value":496},{"type":37,"value":498},{"type":32,"tag":500,"props":3524,"children":3525},{},[],{"type":32,"tag":33,"props":3527,"children":3528},{},[3529],{"type":32,"tag":50,"props":3530,"children":3531},{},[3532,3533,3537,3538,3542,3543],{"type":37,"value":510},{"type":32,"tag":70,"props":3534,"children":3535},{"href":72},[3536],{"type":37,"value":515},{"type":37,"value":517},{"type":32,"tag":70,"props":3539,"children":3540},{"href":419},[3541],{"type":37,"value":522},{"type":37,"value":517},{"type":32,"tag":70,"props":3544,"children":3545},{"href":439},[3546],{"type":37,"value":528},{"title":7,"searchDepth":530,"depth":530,"links":3548},[3549,3550,3557,3558,3559,3560,3561,3562],{"id":88,"depth":530,"text":91},{"id":114,"depth":530,"text":117,"children":3551},[3552,3553,3554,3555,3556],{"id":126,"depth":536,"text":129},{"id":144,"depth":536,"text":147},{"id":155,"depth":536,"text":158},{"id":166,"depth":536,"text":169},{"id":177,"depth":536,"text":180},{"id":188,"depth":530,"text":191},{"id":267,"depth":530,"text":270},{"id":302,"depth":530,"text":305},{"id":356,"depth":530,"text":359},{"id":377,"depth":530,"text":380},{"id":463,"depth":530,"text":466},1781076734843]