[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-cross-service-consistency-en":3,"blog-adjacent-cross-service-consistency-en":29,"blog-related-cross-service-consistency-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":28},47,"cross-service-consistency","Cross-Service Consistency: Compensation Beats Distributed Transactions","Distributed transactions sound complete, but real projects rely more on compensable business flows.","\u003Cp>When one operation writes to orders, inventory and finance at once, strong consistency is hard to achieve. We start by admitting that, then design mechanisms that detect and repair divergence.\u003C\u002Fp>\n\u003Ch2>Three pragmatic principles\u003C\u002Fh2>\n\u003Cp>Every step is traceable: timestamp, result and request id, so divergence can be located precisely.\u003C\u002Fp>\n\u003Cp>Key states are eventually consistent: a failed inventory deduction retries automatically and escalates to a human queue after a threshold.\u003C\u002Fp>\n\u003Cp>Reconciliation as a safety net: a daily cross-system comparison generates tickets automatically instead of waiting for complaints.\u003C\u002Fp>\n\u003Ch2>A real example\u003C\u002Fh2>\n\u003Cp>After a payment succeeded, the inventory call timed out. The order was marked paid while stock was never deducted. Our fix publishes the inventory change as a message, retries idempotently, and alerts past a threshold.\u003C\u002Fp>\n\u003Cp>In six months the mechanism repaired a dozen divergences without manual intervention.\u003C\u002Fp>\n\u003Cp>Distributed systems will always be briefly inconsistent. The goal is not zero errors, but detecting and repairing them without drama.\u003C\u002Fp>","","indigo","佳益方圆团队","2026-03-27T10:41:00+08:00",1,false,[16,17,18],"Distributed","Consistency","Architecture",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},0,"engineering","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,{},{"previous":30,"next":48},{"id":31,"slug":32,"title":33,"excerpt":34,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":36,"updatedAt":36,"readingMinutes":13,"featured":14,"tags":37,"category":41},26,"advice-to-small-teams","Five Pieces of Advice for Teams Just Starting Out","If we started again, these are the five things we would want to know on day one.","cyan","2026-03-29T09:28:00+08:00",[38,39,40],"Startup","Advice","Beginnings",{"id":42,"parentId":20,"slug":43,"name":44,"description":45,"icon":46,"cover":9,"tone":25,"kind":26,"sortOrder":47,"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":49,"slug":50,"title":51,"excerpt":52,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":53,"updatedAt":53,"readingMinutes":13,"featured":14,"tags":54,"category":58},67,"pm-in-project-business","What a Product Manager Does in a Project Business","Without an owned product line, the value is not in drawing prototypes but in thinking the client's problem through.","2026-03-25T10:41:00+08:00",[55,56,57],"Product Management","Projects","Roles",{"id":59,"parentId":20,"slug":60,"name":61,"description":62,"icon":63,"cover":9,"tone":25,"kind":26,"sortOrder":64,"count":20},2,"product-thinking","Product Thinking","Requirement analysis, user experience and product design methods, plus the thinking from business problems to product solutions.","lightbulb",50,[66,76,86],{"id":67,"slug":68,"title":69,"excerpt":70,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":71,"updatedAt":71,"readingMinutes":13,"featured":14,"tags":72,"category":75},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",[73,74,22],"Integration","APIs",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":13,"slug":77,"title":78,"excerpt":79,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":80,"updatedAt":81,"readingMinutes":59,"featured":82,"tags":83,"category":85},"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",true,[84,18],"System Evolution",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":87,"slug":88,"title":89,"excerpt":90,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":91,"updatedAt":91,"readingMinutes":13,"featured":14,"tags":92,"category":96},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",[93,94,95],"API Design","Idempotency","Reliability",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20}]