[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-database-pool-outage-en":3,"blog-adjacent-database-pool-outage-en":30,"blog-related-database-pool-outage-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},80,"database-pool-outage","Incident Review: Running Out of Database Connections","The system went down at nine on a Monday morning because one connection was never closed.","\u003Cp>The failure hit at peak time. Pages spun, server logs filled with timeouts. We traced from gateway to database and found the cause in a loop.\u003C\u002Fp>\n\u003Ch2>The chain\u003C\u002Fh2>\n\u003Cp>A batch routine opened a database connection inside a loop without closing it, exhausting the pool within twenty minutes.\u003C\u002Fp>\n\u003Cp>With the pool empty, every request queued, and the thirty-second timeout made the interface appear frozen.\u003C\u002Fp>\n\u003Cp>Monitoring collected CPU and memory but not pool usage, so no alert fired.\u003C\u002Fp>\n\u003Ch2>Fix and improvements\u003C\u002Fh2>\n\u003Cp>The same connection is now reused, and code review includes a resource release check.\u003C\u002Fp>\n\u003Cp>Monitoring tracks active connections and queue length, with an alert at eighty percent.\u003C\u002Fp>\n\u003Cp>Timeouts dropped from thirty seconds to eight so users see an error instead of waiting.\u003C\u002Fp>\n\u003Cp>An incident review should not hunt for a person; it should find the path nobody was watching. Cover it and the same failure stays away.\u003C\u002Fp>","","slate","佳益方圆团队","2026-06-15T11:10:00+08:00",1,false,[16,17,18],"Retrospective","Incident","Database",{"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},60,"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",[38,39,40],"Pricing","Commercial","Product",{"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},99,"when-to-pair","When Pairing Is Worth It","Pairing is expensive: two people, one job. So we only use it in specific situations.","2026-06-13T11:10:00+08:00",[55,56,57],"Team Culture","Pair Programming","Collaboration",{"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,88],{"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":82,"author":11,"publishedAt":83,"updatedAt":83,"readingMinutes":13,"featured":14,"tags":84,"category":87},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,85,86],"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":89,"slug":90,"title":91,"excerpt":92,"content":9,"cover":9,"tone":93,"author":11,"publishedAt":94,"updatedAt":94,"readingMinutes":13,"featured":14,"tags":95,"category":98},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,96,97],"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}]