[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-migration-three-runs-en":3,"blog-related-migration-three-runs-en":30,"blog-adjacent-migration-three-runs-en":63},{"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},82,"migration-three-runs","Retrospective: Three Reruns for a Hundred Thousand Rows","The first run errored, the second disagreed on totals, the third passed. Each failure exposed a different problem.","\u003Cp>A legacy replacement needed a hundred thousand customer and contract records migrated. Planned at two days, it took ten, and the final cutover had zero discrepancy.\u003C\u002Fp>\n\u003Ch2>Why each run failed\u003C\u002Fh2>\n\u003Cp>Run one: mismatched charsets turned Chinese customer names into garbage. Source was latin1, target utf8mb4.\u003C\u002Fp>\n\u003Cp>Run two: precision loss. Source used floats and target used decimals, and rounding produced one-cent differences that accumulated.\u003C\u002Fp>\n\u003Cp>Run three: broken contract relations. Legacy customer ids were strings with stray spaces, so joins failed.\u003C\u002Fp>\n\u003Ch2>What we keep from it\u003C\u002Fh2>\n\u003Cp>Truncate the target table before each rerun so the migration is idempotent and leftovers do not confuse analysis.\u003C\u002Fp>\n\u003Cp>A verification script reports row counts, amount totals and null ratios for key fields automatically.\u003C\u002Fp>\n\u003Cp>Migration logs keep original values so any record and field can be traced.\u003C\u002Fp>\n\u003Cp>Migration time is almost always underestimated. Prioritise the verification script above migration speed.\u003C\u002Fp>","","teal","佳益方圆团队","2026-05-22T13:36:00+08:00",1,false,[16,17,18],"Retrospective","Migration","Legacy",{"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,{},[31,42,53],{"id":32,"slug":33,"title":34,"excerpt":35,"content":9,"cover":9,"tone":36,"author":11,"publishedAt":37,"updatedAt":37,"readingMinutes":13,"featured":14,"tags":38,"category":41},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,39,40],"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":43,"slug":44,"title":45,"excerpt":46,"content":9,"cover":9,"tone":47,"author":11,"publishedAt":48,"updatedAt":48,"readingMinutes":13,"featured":14,"tags":49,"category":52},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.","cyan","2026-10-01T10:13:00+08:00",[16,50,51],"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":54,"slug":55,"title":56,"excerpt":57,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":58,"updatedAt":58,"readingMinutes":13,"featured":14,"tags":59,"category":62},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.","2026-09-19T11:26:00+08:00",[16,60,61],"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},{"previous":64,"next":81},{"id":65,"slug":66,"title":67,"excerpt":68,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":69,"updatedAt":69,"readingMinutes":13,"featured":14,"tags":70,"category":74},62,"cheap-usability-testing","Cheap Ways to Run Usability Tests","No lab and no eye tracker needed. Five people, one laptop and an hour reveal most problems.","2026-05-24T13:36:00+08:00",[71,72,73],"Usability","Research","Product",{"id":75,"parentId":21,"slug":76,"name":77,"description":78,"icon":79,"cover":9,"tone":26,"kind":27,"sortOrder":80,"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":82,"slug":83,"title":84,"excerpt":85,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":86,"updatedAt":86,"readingMinutes":13,"featured":14,"tags":87,"category":91},101,"who-joins-client-visits","Who Should Visit the Client","Client visits are not only for sales and project managers. Developers' presence is undervalued.","2026-05-20T13:36:00+08:00",[88,89,90],"Team Culture","Client Communication","Requirements",{"id":92,"parentId":21,"slug":93,"name":94,"description":95,"icon":96,"cover":9,"tone":26,"kind":27,"sortOrder":97,"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]