[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-regression-escape-en":3,"blog-adjacent-regression-escape-en":30,"blog-related-regression-escape-en":65},{"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":29},85,"regression-escape","Retrospective: A Regression That Slipped Through","One unrelated change brought back a bug fixed three months earlier.","\u003Cp>The release changed a single line in the export feature. After deployment the client reported wrong tax rates on the invoice page again. We had fixed that bug three months earlier; the fix was overwritten and no regression test covered it.\u003C\u002Fp>\n\u003Ch2>Three failures in the chain\u003C\u002Fh2>\n\u003Cp>While editing export logic, the developer did not notice it reused a calculation function from invoicing.\u003C\u002Fp>\n\u003Cp>Regression cases covered only the changed area, not downstream features sharing the logic.\u003C\u002Fp>\n\u003Cp>Review looked at the diff without checking who else calls that function.\u003C\u002Fp>\n\u003Ch2>Improvements\u003C\u002Fh2>\n\u003Cp>Every fixed defect gets an automated case tagged for the regression suite, run on every release.\u003C\u002Fp>\n\u003Cp>Review requires an impact check: list the callers of modified functions and confirm each.\u003C\u002Fp>\n\u003Cp>Shared utilities carry comments describing their usage so they are not edited casually.\u003C\u002Fp>\n\u003Cp>Regressions are rarely untested; they are unknown. Analysing impact as a habit beats adding more tests.\u003C\u002Fp>","","cyan","佳益方圆团队","2026-04-16T16:15:00+08:00",1,false,[16,17,18],"Retrospective","Testing","Quality",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":26,"kind":27,"sortOrder":28,"count":21},3,0,"project-retrospective","Project Retrospectives","Real project records from zero to one, covering problems, solutions, lessons learned and final outcomes.","clipboard-check","blue","article",40,{},{"previous":31,"next":48},{"id":32,"slug":33,"title":34,"excerpt":35,"content":9,"cover":9,"tone":26,"author":11,"publishedAt":36,"updatedAt":36,"readingMinutes":13,"featured":14,"tags":37,"category":41},65,"mobile-context-first","Mobile Context Decides the Interaction","Moving admin features onto phones does not start with shrinking the screen, but with understanding where users open it.","2026-04-18T16:15:00+08:00",[38,39,40],"Mobile","Context","Product Design",{"id":42,"parentId":21,"slug":43,"name":44,"description":45,"icon":46,"cover":9,"tone":26,"kind":27,"sortOrder":47,"count":21},2,"product-thinking","Product Thinking","Requirement analysis, user experience and product design methods, plus the thinking from business problems to product solutions.","lightbulb",50,{"id":49,"slug":50,"title":51,"excerpt":52,"content":9,"cover":9,"tone":26,"author":11,"publishedAt":53,"updatedAt":53,"readingMinutes":13,"featured":14,"tags":54,"category":58},104,"intern-program","Notes on Running an Internship","Interns are not cheap labour. Train them as future colleagues and the return is surprising.","2026-04-14T16:15:00+08:00",[55,56,57],"Team Culture","Internship","Mentoring",{"id":59,"parentId":21,"slug":60,"name":61,"description":62,"icon":63,"cover":9,"tone":26,"kind":27,"sortOrder":64,"count":21},4,"team-culture","Team and Culture","Company events, tech sharing, team building and hiring culture that show the daily life of the Jiayifangyuan team.","users",30,[66,77,87],{"id":67,"slug":68,"title":69,"excerpt":70,"content":9,"cover":9,"tone":71,"author":11,"publishedAt":72,"updatedAt":72,"readingMinutes":13,"featured":14,"tags":73,"category":76},70,"gov-project-acceptance","Retrospective: Why Acceptance Took Half a Year","The system was live for months while acceptance stalled. The causes were documents, process and communication, not software.","indigo","2026-10-13T09:00:00+08:00",[16,74,75],"Government","Acceptance",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":26,"kind":27,"sortOrder":28,"count":21},{"id":78,"slug":79,"title":80,"excerpt":81,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":82,"updatedAt":82,"readingMinutes":13,"featured":14,"tags":83,"category":86},71,"mes-integration-retro","Retrospective: Integrating ERP With MES","The hard part of integration is not the interface, but getting two departments to agree on what a field means.","2026-10-01T10:13:00+08:00",[16,84,85],"Manufacturing","Integration",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":26,"kind":27,"sortOrder":28,"count":21},{"id":88,"slug":89,"title":90,"excerpt":91,"content":9,"cover":9,"tone":92,"author":11,"publishedAt":93,"updatedAt":93,"readingMinutes":13,"featured":14,"tags":94,"category":97},72,"cross-border-site-retro","Retrospective: Traffic Arrived, Enquiries Did Not","Ads ran normally after launch but enquiries stayed low. The review found trust and form friction were the blockers.","teal","2026-09-19T11:26:00+08:00",[16,95,96],"Cross-border","Conversion",{"id":20,"parentId":21,"slug":22,"name":23,"description":24,"icon":25,"cover":9,"tone":26,"kind":27,"sortOrder":28,"count":21}]