[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-message-queue-tradeoffs-en":3,"blog-related-message-queue-tradeoffs-en":28,"blog-adjacent-message-queue-tradeoffs-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},38,"message-queue-tradeoffs","Message Queues Are Not a Cure-All","A queue decouples and absorbs spikes, and also introduces duplicates, ordering and observability problems.","\u003Cp>In architecture discussions, a message queue often appears as the answer: slow system, add a queue; coupled modules, add a queue. Many projects end up with more complexity and more failure points for modest benefit.\u003C\u002Fp>\n\u003Ch2>Three questions before adopting one\u003C\u002Fh2>\n\u003Cp>Does the business really need asynchrony? If a user can wait three seconds, there is no need to split the flow.\u003C\u002Fp>\n\u003Cp>Can you accept at-least-once delivery? If not, consumers must be idempotent.\u003C\u002Fp>\n\u003Cp>What happens to failed messages? Without a dead letter queue and a manual compensation path, you are hiding problems.\u003C\u002Fp>\n\u003Ch2>Common misconceptions\u003C\u002Fh2>\n\u003Cp>Using a queue to fix database performance. The write bottleneck remains, it just becomes a backlog.\u003C\u002Fp>\n\u003Cp>Assuming order is guaranteed. With multiple partitions or consumers, ordering requires explicit design.\u003C\u002Fp>\n\u003Cp>No monitoring. A backlog sits unnoticed for three days and the business stops before anyone reacts.\u003C\u002Fp>\n\u003Cp>A queue is a tool, not an architectural goal. If a synchronous call solves it, do not add another middleware.\u003C\u002Fp>","","teal","佳益方圆团队","2026-07-13T09:44:00+08:00",1,false,[16,17,18],"Architecture","Queues","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,40,51],{"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":39},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.","cyan","2026-10-17T09:00:00+08:00",[37,38,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":41,"title":42,"excerpt":43,"content":9,"cover":9,"tone":34,"author":11,"publishedAt":44,"updatedAt":45,"readingMinutes":46,"featured":47,"tags":48,"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,[49,16],"System Evolution",{"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":81},{"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":74},17,"hiring-is-harder-than-sales","Hiring Is Harder Than Selling","Clients can be chosen over time; people must be judged in a narrow window. Most of our mistakes trace back to hiring.","slate","2026-07-15T16:31:00+08:00",[71,72,73],"Startup","Hiring","Team",{"id":75,"parentId":20,"slug":76,"name":77,"description":78,"icon":79,"cover":9,"tone":24,"kind":25,"sortOrder":80,"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":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},58,"dashboard-metric-definition","Dashboards: Define the Metric Before Showing the Number","The same 'customer count' can mean three different things to sales, finance and operations.","2026-07-11T09:44:00+08:00",[88,89,90],"Dashboards","Metrics","Product Design",{"id":46,"parentId":20,"slug":92,"name":93,"description":94,"icon":95,"cover":9,"tone":24,"kind":25,"sortOrder":96,"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]