[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-testing-on-a-budget-en":3,"blog-related-testing-on-a-budget-en":28,"blog-adjacent-testing-on-a-budget-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},40,"testing-on-a-budget","What to Test When the Budget Is Tight","Without a dedicated QA team you still need a strategy. Spend the limited effort where failures cost the most.","\u003Cp>Small teams often compress testing. Skipping it entirely produces incidents; covering everything does not fit the schedule. Our approach is to admit the constraint and prioritise by risk.\u003C\u002Fp>\n\u003Ch2>Test these four first\u003C\u002Fh2>\n\u003Cp>Anything involving money or permissions: amount calculation, approval routing, unauthorised access. Mistakes here are the most expensive.\u003C\u002Fp>\n\u003Cp>Data writes and migration: duplicate submissions, concurrent edits, imports and exports are hard to repair afterwards.\u003C\u002Fp>\n\u003Cp>The main path of core workflows that users touch every day.\u003C\u002Fp>\n\u003Cp>Historical defects: every serious fix gets a regression case.\u003C\u002Fp>\n\u003Ch2>What can wait\u003C\u002Fh2>\n\u003Cp>Cosmetic details on presentation pages, confirmed during acceptance.\u003C\u002Fp>\n\u003Cp>Low-frequency admin features, where small issues are tolerable as long as no data is lost.\u003C\u002Fp>\n\u003Cp>Automation coverage numbers. A stable core path is worth more than eighty percent coverage on paper.\u003C\u002Fp>\n\u003Cp>A test strategy is not about coverage numbers. It is about deciding which failures must never happen, and spending accordingly.\u003C\u002Fp>","","cyan","佳益方圆团队","2026-06-19T11:10:00+08:00",1,false,[16,17,18],"Testing","Quality","Engineering",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},0,"engineering","Hands-on engineering practices in architecture, performance optimization, AI integration and cross-platform delivery from our R and D team.","cpu","blue","article",60,{},[29,39,51],{"id":30,"slug":31,"title":32,"excerpt":33,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":34,"updatedAt":34,"readingMinutes":13,"featured":14,"tags":35,"category":38},30,"integration-api-pitfalls","Five Traps in Enterprise System Integration","However complete the API documentation is, integration usually stalls on field semantics, timeouts and repeated pushes.","2026-10-17T09:00:00+08:00",[36,37,18],"Integration","APIs",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},{"id":13,"slug":40,"title":41,"excerpt":42,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":43,"updatedAt":44,"readingMinutes":45,"featured":46,"tags":47,"category":50},"why-enterprise-systems-age","Why Enterprise Systems Start to Age After Three Years","A system can pass acceptance with every feature checked, then feel awkward three years later. The problem is rarely the code — it is the changes that were never considered at delivery.","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",2,true,[48,49],"System Evolution","Architecture",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},{"id":52,"slug":53,"title":54,"excerpt":55,"content":9,"cover":9,"tone":24,"author":11,"publishedAt":56,"updatedAt":56,"readingMinutes":13,"featured":14,"tags":57,"category":61},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",[58,59,60],"API Design","Idempotency","Reliability",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},{"previous":63,"next":80},{"id":64,"slug":65,"title":66,"excerpt":67,"content":9,"cover":9,"tone":24,"author":11,"publishedAt":68,"updatedAt":68,"readingMinutes":13,"featured":14,"tags":69,"category":73},19,"brand-for-small-teams","Where a Small Company's Brand Comes From","Without an ad budget, a brand is built by every delivery, every email and every problem taken seriously.","2026-06-21T10:57:00+08:00",[70,71,72],"Startup","Brand","Reputation",{"id":74,"parentId":20,"slug":75,"name":76,"description":77,"icon":78,"cover":9,"tone":24,"kind":25,"sortOrder":79,"count":20},6,"founder-notes","Founder Notes","Reflections from the founding team on business, management and product, documenting the growth of a software company.","pen-tool",10,{"id":26,"slug":81,"title":82,"excerpt":83,"content":9,"cover":9,"tone":24,"author":11,"publishedAt":84,"updatedAt":84,"readingMinutes":13,"featured":14,"tags":85,"category":89},"pricing-tiers-design","Designing Pricing Tiers","Tiers are not random feature buckets. They should let a client recognise which one they belong to.","2026-06-17T11:10:00+08:00",[86,87,88],"Pricing","Commercial","Product",{"id":45,"parentId":20,"slug":90,"name":91,"description":92,"icon":93,"cover":9,"tone":24,"kind":25,"sortOrder":94,"count":20},"product-thinking","Product Thinking","Requirement analysis, user experience and product design methods, plus the thinking from business problems to product solutions.","lightbulb",50]