[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-quote-by-scope-not-hours-en":3,"blog-adjacent-quote-by-scope-not-hours-en":28,"blog-related-quote-by-scope-not-hours-en":62},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":27},10,"quote-by-scope-not-hours","Why We Quote by Scope, Not by Man-Days","Man-day pricing looks fair, but it pushes every uncertainty onto the client. We would rather agree on scope and assumptions first, then talk about money.","\u003Cp>In our first years we quoted like most software teams: headcount times days times a rate. It was easy to explain and easy to compare, but the longer we did it, the clearer it became that it solved nothing that actually mattered.\u003C\u002Fp>\n\u003Ch2>Three side effects of man-day pricing\u003C\u002Fh2>\n\u003Cp>First, it pulls attention to hours instead of solutions. Nobody asks whether the same requirement could be met in a simpler way.\u003C\u002Fp>\n\u003Cp>Second, the team learns to fill the days. Hours are both the unit of billing and the proof of effort, so finishing early becomes awkward to explain.\u003C\u002Fp>\n\u003Ch2>How we quote now\u003C\u002Fh2>\n\u003Cp>We start with a scope workshop, splitting requirements into must-have, later and explicitly out of scope, then commit to a price range. Once the scope is written down, the number holds up on its own.\u003C\u002Fp>\n\u003Cp>Every quote lists its assumptions: who provides third-party APIs, who cleans the data, how acceptance is judged. If an assumption changes, we revisit the price.\u003C\u002Fp>\n\u003Cp>This approach cost us a few deals early on, but it filtered for clients willing to describe their problem honestly. In the long run that is worth more than winning on the lowest number.\u003C\u002Fp>","","blue","佳益方圆团队","2026-10-07T09:00:00+08:00",1,false,[16,17,18],"Startup","Pricing","Partnership",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":10,"kind":26,"sortOrder":4,"count":21},6,0,"founder-notes","Founder Notes","Reflections from the founding team on business, management and product, documenting the growth of a software company.","pen-tool","article",{},{"previous":29,"next":46},{"id":30,"slug":31,"title":32,"excerpt":33,"content":9,"cover":9,"tone":34,"author":11,"publishedAt":35,"updatedAt":35,"readingMinutes":13,"featured":14,"tags":36,"category":40},108,"gansu-manufacturing-digitalization","Three Observations on Manufacturing Digitalisation in Gansu","After visiting a dozen local manufacturers, digitalisation is less about buying software than filling foundations.","slate","2026-10-09T09:00:00+08:00",[37,38,39],"Industry Watch","Manufacturing","Digitalisation",{"id":41,"parentId":21,"slug":42,"name":37,"description":43,"icon":44,"cover":9,"tone":10,"kind":26,"sortOrder":45,"count":21},5,"industry-watch","In-depth analysis of internet, software and digital industry trends with our own point of view.","globe",20,{"id":47,"slug":48,"title":49,"excerpt":50,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":51,"updatedAt":51,"readingMinutes":13,"featured":14,"tags":52,"category":56},31,"idempotent-design-basics","Idempotency: Duplicate Submissions Are Not Just Double Clicks","Retries, redelivery and impatient users all send the same request more than once. Idempotency belongs in the API design.","2026-10-05T10:13:00+08:00",[53,54,55],"API Design","Idempotency","Reliability",{"id":13,"parentId":21,"slug":57,"name":58,"description":59,"icon":60,"cover":9,"tone":10,"kind":26,"sortOrder":61,"count":21},"engineering","Engineering","Hands-on engineering practices in architecture, performance optimization, AI integration and cross-platform delivery from our R and D team.","cpu",60,[63,74,85],{"id":64,"slug":65,"title":66,"excerpt":67,"content":9,"cover":9,"tone":68,"author":11,"publishedAt":69,"updatedAt":69,"readingMinutes":13,"featured":14,"tags":70,"category":73},11,"three-lessons-from-first-client","Three Lessons From Our First Client","Our first project in 2019 was worth thirty thousand yuan and taught us more about contracts, acceptance and honesty than any course.","cyan","2026-09-25T10:13:00+08:00",[16,71,72],"Client","Contract",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":10,"kind":26,"sortOrder":4,"count":21},{"id":75,"slug":76,"title":77,"excerpt":78,"content":9,"cover":9,"tone":79,"author":11,"publishedAt":80,"updatedAt":80,"readingMinutes":13,"featured":14,"tags":81,"category":84},12,"choosing-clients-not-deals","Choosing Clients Matters More Than Choosing Projects","The same contract can grow a team or drain it. We now screen clients with three questions.","indigo","2026-09-13T11:26:00+08:00",[16,82,83],"Clients","Judgement",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":10,"kind":26,"sortOrder":4,"count":21},{"id":86,"slug":87,"title":88,"excerpt":89,"content":9,"cover":9,"tone":90,"author":11,"publishedAt":91,"updatedAt":91,"readingMinutes":13,"featured":14,"tags":92,"category":95},13,"cash-flow-before-margin","Cash Flow Beats Margin","Margin is a number in the ledger; cash flow decides whether the company survives to the next payment.","teal","2026-09-01T12:39:00+08:00",[16,93,94],"Cash Flow","Operations",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":10,"kind":26,"sortOrder":4,"count":21}]