[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-yVyU0nHHQWkcgVC2U98-GP91DmDYs8TfmcqVmeZnfv4":3},{"data":4,"sourceMap":-1},{"info":5,"latest":30,"pinned":969},{"_createdAt":6,"_id":7,"_rev":8,"_system":9,"_type":12,"_updatedAt":13,"description":14,"descriptionText":23,"slug":26,"title":29},"2025-04-24T16:28:57Z","797b8797-6e65-4723-b53f-8bc005305384","IpfPEqg1c3Byvj9RrB3Xaj",{"base":10},{"id":7,"rev":11},"oc42Nphz1oZNOg9ttSv7Tn","blogTag","2026-05-07T14:43:30Z",[15],{"_key":16,"_type":17,"children":18,"markDefs":24,"style":25},"bb32f75814b4","block",[19],{"_key":20,"_type":21,"marks":22,"text":23},"dbcf27ef29b3","span",[],"Community-generated articles submitted for your reading pleasure. If you’re interested in seeing your work here, log in with your Stack Overflow account and click the link below. Articles will be licensed under a CC BY-SA 4.0 grant. ",[],"normal",{"_type":27,"current":28},"slug","contributed","The Heap",[31,87,127,161,206,266,313,359,405,452,496,554,598,639,683,725,773,813,850,893,930],{"_id":32,"author":33,"commentCount":45,"comments":46,"excerpt":42,"featureTag":42,"image":42,"publishedAt":47,"slug":48,"sponsored":42,"tags":50,"title":86},"4b22c2a3-3779-4966-93eb-5230391dbdce",[34],{"_id":35,"avatar":36,"name":41,"role":42,"slug":43},"6b986f42-966a-4604-a879-d557a5596b8b",{"_type":37,"asset":38},"image",{"_ref":39,"_type":40},"image-839e0831cb4721742ee7e88bf72ecd3378f1b582-2000x2000-png","reference","Devlin Duldulao",null,{"_type":27,"current":44},"devlin-duldulao",0,true,"2026-06-23T14:08:58.595Z",{"_type":27,"current":49},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem",[51,61,69],{"_createdAt":6,"_id":7,"_rev":8,"_system":52,"_type":12,"_updatedAt":13,"description":54,"slug":60,"title":29},{"base":53},{"id":7,"rev":11},[55],{"_key":16,"_type":17,"children":56,"markDefs":59,"style":25},[57],{"_key":20,"_type":21,"marks":58,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":63,"_rev":64,"_type":12,"_updatedAt":65,"slug":66,"title":68},"2023-05-23T16:43:21Z","wp-tagcat-ai","fpDTFQqIDjNJIbHDKPBGpV","2025-01-30T16:19:01Z",{"current":67},"ai","AI",{"_createdAt":70,"_id":71,"_rev":72,"_type":12,"_updatedAt":73,"description":74,"slug":83,"title":85},"2026-06-15T15:00:53Z","c9310194-f231-4342-a4aa-df4ad0452efe","MwgZb85ftkde1TTvSyOi3l","2026-06-15T15:01:32Z",[75],{"_key":76,"_type":17,"children":77,"markDefs":82,"style":25},"ef6a7da8a160",[78],{"_key":79,"_type":21,"marks":80,"text":81},"bca8dd798afb",[],"Everything that happens after the commit. ",[],{"_type":27,"current":84},"running-software","Running software","Your AI shipped a backend that boots. That is the whole problem.",{"_id":88,"author":89,"commentCount":106,"comments":46,"excerpt":42,"featureTag":42,"image":42,"publishedAt":107,"slug":108,"sponsored":42,"tags":110,"title":126},"747affaa-418e-4113-9475-56aefb1b71b4",[90,98],{"_id":91,"avatar":92,"name":95,"role":42,"slug":96},"99a0f65f-79ff-4018-87c6-36fd0ab68798",{"_type":37,"asset":93},{"_ref":94,"_type":40},"image-d055cf67dce541e0f0691f45adfe19e33c693ae7-1080x1022-jpg","Praveen Kumar Gunasekaran",{"_type":27,"current":97},"praveen-kumar-gunasekaran",{"_id":99,"avatar":100,"name":103,"role":42,"slug":104},"6cdb850d-d5f7-4386-805a-51fed036bd94",{"_type":37,"asset":101},{"_ref":102,"_type":40},"image-b60a71f13cbe23b7487987cd0059b51cbdb79f69-512x512-jpg","Syed Ahamed",{"_type":27,"current":105},"syed-ahamed",1,"2026-06-15T15:22:54.784Z",{"_type":27,"current":109},"selenium-vs-cypress-vs-playwright-choosing-your-test-automation-framework",[111,121],{"_createdAt":6,"_id":7,"_rev":8,"_system":112,"_type":12,"_updatedAt":13,"description":114,"slug":120,"title":29},{"base":113},{"id":7,"rev":11},[115],{"_key":16,"_type":17,"children":116,"markDefs":119,"style":25},[117],{"_key":20,"_type":21,"marks":118,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":122,"_rev":123,"_type":12,"_updatedAt":62,"slug":124,"title":125},"wp-tagcat-testing","9HpbCsT2tq0xwozQfkc4ih",{"current":125},"testing","Selenium vs. Cypress vs Playwright: Choosing your test automation framework",{"_id":128,"author":129,"commentCount":45,"comments":46,"excerpt":42,"featureTag":42,"image":42,"publishedAt":138,"slug":139,"sponsored":42,"tags":141,"title":160},"5af28603-2494-4e14-b49b-86db6b3507aa",[130],{"_id":131,"avatar":132,"name":135,"role":42,"slug":136},"d4de22a0-5dc6-4266-956f-144265644fd1",{"_type":37,"asset":133},{"_ref":134,"_type":40},"image-4a7590d84f15edc7498b09b3deb0bf1c7ef1da4c-567x811-png","Dr. Ahmad Mateen Ishanzai",{"_type":27,"current":137},"ahmad-ishanzai","2026-06-12T16:17:10.988Z",{"_type":27,"current":140},"designing-cherryscript-optimizing-data-driven-workflows-via-custom-python-based-interpreters",[142,152],{"_createdAt":6,"_id":7,"_rev":8,"_system":143,"_type":12,"_updatedAt":13,"description":145,"slug":151,"title":29},{"base":144},{"id":7,"rev":11},[146],{"_key":16,"_type":17,"children":147,"markDefs":150,"style":25},[148],{"_key":20,"_type":21,"marks":149,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":153,"_id":154,"_rev":155,"_type":12,"_updatedAt":156,"slug":157,"title":159},"2026-06-12T16:16:20Z","51c761d7-73f7-42f4-aa49-8484e3849e7c","MwgZb85ftkde1TTvQsHYa6","2026-06-12T16:16:45Z",{"_type":27,"current":158},"buiilding-software","Buiilding software","Designing CherryScript: Optimizing Data-Driven Workflows via Custom Python-Based Interpreters",{"_id":162,"author":163,"commentCount":45,"comments":46,"excerpt":172,"featureTag":173,"image":174,"publishedAt":178,"slug":179,"sponsored":42,"tags":181,"title":205},"668f160b-bc58-41f5-bd90-75a3912d1456",[164],{"_id":165,"avatar":166,"name":169,"role":42,"slug":170},"wp-author-226",{"_type":37,"asset":167},{"_ref":168,"_type":40},"image-56688f6337dd0a96034dfc998cdecc7810597d81-1024x1024-png","Ryan Donovan",{"current":171},"rdonovan","Let's take a moment to shout out all the articles we’re seen posted so far and encourage folks reading to reach out about your own.",false,{"_type":37,"asset":175,"attribution":177},{"_ref":176,"_type":40},"image-e55d47625324d162a35b4d0b08e23c1e65ad5634-12000x6300-jpg","Alexandra Francis","2026-05-29T14:00:00.000Z",{"_type":27,"current":180},"best-of-the-heap-first-post-of-the-past",[182,186,190,195],{"_createdAt":62,"_id":183,"_rev":123,"_type":12,"_updatedAt":62,"slug":184,"title":185},"wp-tagcat-se-stackoverflow",{"current":185},"se-stackoverflow",{"_createdAt":62,"_id":187,"_rev":123,"_type":12,"_updatedAt":62,"slug":188,"title":189},"wp-tagcat-se-tech",{"current":189},"se-tech",{"_createdAt":62,"_id":191,"_rev":123,"_type":12,"_updatedAt":62,"slug":192,"title":194},"wp-tagcat-community",{"current":193},"community","Community",{"_createdAt":6,"_id":7,"_rev":8,"_system":196,"_type":12,"_updatedAt":13,"description":198,"slug":204,"title":29},{"base":197},{"id":7,"rev":11},[199],{"_key":16,"_type":17,"children":200,"markDefs":203,"style":25},[201],{"_key":20,"_type":21,"marks":202,"text":23},[],[],{"_type":27,"current":28},"Best of the Heap: First post of the past",{"_id":207,"author":208,"commentCount":214,"comments":46,"excerpt":215,"featureTag":42,"image":42,"publishedAt":216,"slug":217,"sponsored":42,"tags":219,"title":265},"0dba33c1-7962-4f06-aff5-e68391f9a9e5",[209],{"_id":210,"avatar":42,"name":211,"role":42,"slug":212},"a6192594-b6f5-42d4-a678-c970202be234","Greg Hatchuk",{"_type":27,"current":213},"greg-hatchuk",13,"What interviewers are actually looking for is very different from what you'd assume if you're the one sweating in the hotseat.","2026-05-18T16:02:44.474Z",{"_type":27,"current":218},"interviews-aren-t-about-you-sorry",[220,230,261],{"_createdAt":6,"_id":7,"_rev":8,"_system":221,"_type":12,"_updatedAt":13,"description":223,"slug":229,"title":29},{"base":222},{"id":7,"rev":11},[224],{"_key":16,"_type":17,"children":225,"markDefs":228,"style":25},[226],{"_key":20,"_type":21,"marks":227,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":231,"_id":232,"_rev":233,"_system":234,"_type":12,"_updatedAt":237,"description":238,"slug":258,"title":260},"2025-08-08T15:49:22Z","39391cf4-6f9a-4238-8670-c1e44b66db9e","09X6HDzCi2VfMov6gSLf7H",{"base":235},{"id":232,"rev":236},"TdCcmC7LyfLVwjB8GEXoh6","2025-12-10T19:34:33Z",[239,247],{"_key":240,"_type":17,"children":241,"markDefs":246,"style":25},"a4b1a37cbbcc",[242],{"_key":243,"_type":21,"marks":244,"text":245},"d8e8f3e0fd9c",[],"These articles are licensed under a Creative Commons Attribution-ShareAlike 4.0 International license. ",[],{"_key":248,"_type":17,"children":249,"markDefs":255,"style":25},"7effd489c71f",[250],{"_key":251,"_type":21,"marks":252,"text":254},"538808bb5325",[253],"fd643b288690","creativecommons.org\u002Flicenses\u002Fby-sa\u002F4.0\u002Fdeed.en",[256],{"_key":253,"_type":257},"link",{"_type":27,"current":259},"cc-by-sa","CC BY-SA 4.0",{"_createdAt":62,"_id":262,"_rev":123,"_type":12,"_updatedAt":62,"slug":263,"title":264},"wp-tagcat-interviews",{"current":264},"interviews","Interviews aren’t about you (sorry)",{"_id":267,"author":268,"commentCount":45,"comments":46,"excerpt":277,"featureTag":42,"image":42,"publishedAt":278,"slug":279,"sponsored":42,"tags":281,"title":312},"d9651389-8274-4007-b836-6524e5b3fb6d",[269],{"_id":270,"avatar":271,"name":274,"role":42,"slug":275},"f4ff424e-8098-49ea-9cdc-1496ca6d06ec",{"_type":37,"asset":272},{"_ref":273,"_type":40},"image-25d20cff2b29f56e969bf7f950f684edfb43c434-3252x2726-jpg","Priya Gopalsamy ",{"_type":27,"current":276},"priya-gopalsamy","Why AI-accelerated teams keep breaking production — and what the ones that don't are doing differently","2026-05-12T16:41:40.025Z",{"_type":27,"current":280},"you-shipped-it-fast-but-did-you-ship-it-right",[282,292,296],{"_createdAt":6,"_id":7,"_rev":8,"_system":283,"_type":12,"_updatedAt":13,"description":285,"slug":291,"title":29},{"base":284},{"id":7,"rev":11},[286],{"_key":16,"_type":17,"children":287,"markDefs":290,"style":25},[288],{"_key":20,"_type":21,"marks":289,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":293,"_rev":123,"_type":12,"_updatedAt":62,"slug":294,"title":295},"wp-tagcat-sdlc",{"current":295},"sdlc",{"_createdAt":231,"_id":232,"_rev":233,"_system":297,"_type":12,"_updatedAt":237,"description":299,"slug":311,"title":260},{"base":298},{"id":232,"rev":236},[300,305],{"_key":240,"_type":17,"children":301,"markDefs":304,"style":25},[302],{"_key":243,"_type":21,"marks":303,"text":245},[],[],{"_key":248,"_type":17,"children":306,"markDefs":309,"style":25},[307],{"_key":251,"_type":21,"marks":308,"text":254},[253],[310],{"_key":253,"_type":257},{"_type":27,"current":259},"You shipped it fast. But did you ship it right?",{"_id":314,"author":315,"commentCount":45,"comments":46,"excerpt":42,"featureTag":42,"image":42,"publishedAt":324,"slug":325,"sponsored":42,"tags":327,"title":358},"3c902fd7-2d6a-44ce-8b89-e7f08a207edc",[316],{"_id":317,"avatar":318,"name":321,"role":42,"slug":322},"e627398e-ce2a-419b-aebd-0111be1e2411",{"_type":37,"asset":319},{"_ref":320,"_type":40},"image-355a488eb8e0fbe6134d04af99285dc0cac80155-1024x1024-png","Najmul Alam Miraj ",{"_type":27,"current":323},"najmul-alam-miraj","2026-05-12T16:20:21.600Z",{"_type":27,"current":326},"building-a-google-drive-sync-engine-that-survives-mv3-service-workers",[328,338,342],{"_createdAt":6,"_id":7,"_rev":8,"_system":329,"_type":12,"_updatedAt":13,"description":331,"slug":337,"title":29},{"base":330},{"id":7,"rev":11},[332],{"_key":16,"_type":17,"children":333,"markDefs":336,"style":25},[334],{"_key":20,"_type":21,"marks":335,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":339,"_rev":123,"_type":12,"_updatedAt":62,"slug":340,"title":341},"wp-tagcat-programming",{"current":341},"programming",{"_createdAt":231,"_id":232,"_rev":233,"_system":343,"_type":12,"_updatedAt":237,"description":345,"slug":357,"title":260},{"base":344},{"id":232,"rev":236},[346,351],{"_key":240,"_type":17,"children":347,"markDefs":350,"style":25},[348],{"_key":243,"_type":21,"marks":349,"text":245},[],[],{"_key":248,"_type":17,"children":352,"markDefs":355,"style":25},[353],{"_key":251,"_type":21,"marks":354,"text":254},[253],[356],{"_key":253,"_type":257},{"_type":27,"current":259},"Building a Google Drive Sync Engine that Survives MV3 Service Workers",{"_id":360,"author":361,"commentCount":45,"comments":46,"excerpt":371,"featureTag":42,"image":42,"publishedAt":372,"slug":373,"sponsored":42,"tags":375,"title":404},"76c9771b-34e6-4d98-8641-ecefc711f0ef",[362],{"_id":363,"avatar":364,"name":367,"role":368,"slug":369},"8b8885eb-df9a-4634-8c86-292b858bf929",{"_type":37,"asset":365},{"_ref":366,"_type":40},"image-2abe55cff8216fd69bb44be2b0bbc3dbf88e735f-768x1024-jpg","Samaresh Kumar Singh","Principal Engineer at HP Inc",{"_type":27,"current":370},"samaresh-kumar-singh","Signature-based detection has always known what it was looking for. Machine learning and autonomous agents are changing the question entirely, shifting from \"does this match a known pattern?\" to \"does this actually make sense in context?\"","2026-05-11T16:25:54.283Z",{"_type":27,"current":374},"when-the-sensor-starts-thinking-snortml-agentic-ai-and-the-evolving-architecture-of-intrusion-detection",[376,386,388],{"_createdAt":6,"_id":7,"_rev":8,"_system":377,"_type":12,"_updatedAt":13,"description":379,"slug":385,"title":29},{"base":378},{"id":7,"rev":11},[380],{"_key":16,"_type":17,"children":381,"markDefs":384,"style":25},[382],{"_key":20,"_type":21,"marks":383,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":63,"_rev":64,"_type":12,"_updatedAt":65,"slug":387,"title":68},{"current":67},{"_createdAt":231,"_id":232,"_rev":233,"_system":389,"_type":12,"_updatedAt":237,"description":391,"slug":403,"title":260},{"base":390},{"id":232,"rev":236},[392,397],{"_key":240,"_type":17,"children":393,"markDefs":396,"style":25},[394],{"_key":243,"_type":21,"marks":395,"text":245},[],[],{"_key":248,"_type":17,"children":398,"markDefs":401,"style":25},[399],{"_key":251,"_type":21,"marks":400,"text":254},[253],[402],{"_key":253,"_type":257},{"_type":27,"current":259},"When the Sensor Starts Thinking: SnortML, Agentic AI, and the Evolving Architecture of Intrusion Detection",{"_id":406,"author":407,"commentCount":416,"comments":46,"excerpt":42,"featureTag":42,"image":42,"publishedAt":417,"slug":418,"sponsored":42,"tags":420,"title":451},"5c2640c3-5502-423f-909d-0e901c736e6b",[408],{"_id":409,"avatar":410,"name":413,"role":42,"slug":414},"142efd11-ca8a-4e6d-aa4a-258930588315",{"_type":37,"asset":411},{"_ref":412,"_type":40},"image-6dab34eea20b065ad4b562c05c9e93a51d9f519d-800x800-png","Srikanth Srinivas",{"_type":27,"current":415},"srikanth-srinivas",2,"2026-05-11T16:11:05.090Z",{"_type":27,"current":419},"oauth-2-0-device-flow-explained-for-engineers-especially-for-backend-engineers",[421,431,435],{"_createdAt":6,"_id":7,"_rev":8,"_system":422,"_type":12,"_updatedAt":13,"description":424,"slug":430,"title":29},{"base":423},{"id":7,"rev":11},[425],{"_key":16,"_type":17,"children":426,"markDefs":429,"style":25},[427],{"_key":20,"_type":21,"marks":428,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":432,"_rev":123,"_type":12,"_updatedAt":62,"slug":433,"title":434},"wp-tagcat-auth",{"current":434},"auth",{"_createdAt":231,"_id":232,"_rev":233,"_system":436,"_type":12,"_updatedAt":237,"description":438,"slug":450,"title":260},{"base":437},{"id":232,"rev":236},[439,444],{"_key":240,"_type":17,"children":440,"markDefs":443,"style":25},[441],{"_key":243,"_type":21,"marks":442,"text":245},[],[],{"_key":248,"_type":17,"children":445,"markDefs":448,"style":25},[446],{"_key":251,"_type":21,"marks":447,"text":254},[253],[449],{"_key":253,"_type":257},{"_type":27,"current":259},"OAuth 2.0 – Device flow explained for Engineers, especially for Backend Engineers",{"_id":453,"author":454,"commentCount":45,"comments":46,"excerpt":42,"featureTag":42,"image":42,"publishedAt":460,"slug":461,"sponsored":42,"tags":463,"title":495},"29b18693-2c46-4d30-aecf-70505ad73357",[455],{"_id":456,"avatar":42,"name":457,"role":42,"slug":458},"8018fd8a-adc1-4f9a-936c-4b7dc11d78b7","Alexey Saldyrkine",{"_type":27,"current":459},"alexey-saldyrkine","2026-05-11T13:55:00.000Z",{"_type":27,"current":462},"compile-time-map-and-compile-time-mutable-variable-with-c-26-reflection",[464,474,479],{"_createdAt":6,"_id":7,"_rev":8,"_system":465,"_type":12,"_updatedAt":13,"description":467,"slug":473,"title":29},{"base":466},{"id":7,"rev":11},[468],{"_key":16,"_type":17,"children":469,"markDefs":472,"style":25},[470],{"_key":20,"_type":21,"marks":471,"text":23},[],[],{"_type":27,"current":28},{"_createdAt":62,"_id":475,"_rev":123,"_type":12,"_updatedAt":62,"slug":476,"title":478},"wp-tagcat-c",{"current":477},"c","c++",{"_createdAt":231,"_id":232,"_rev":233,"_system":480,"_type":12,"_updatedAt":237,"description":482,"slug":494,"title":260},{"base":481},{"id":232,"rev":236},[483,488],{"_key":240,"_type":17,"children":484,"markDefs":487,"style":25},[485],{"_key":243,"_type":21,"marks":486,"text":245},[],[],{"_key":248,"_type":17,"children":489,"markDefs":492,"style":25},[490],{"_key":251,"_type":21,"marks":491,"text":254},[253],[493],{"_key":253,"_type":257},{"_type":27,"current":259},"Compile-Time Map and Compile-Time Mutable Variable with C++26 Reflection",{"_id":497,"author":498,"commentCount":507,"comments":46,"excerpt":508,"featureTag":42,"image":509,"publishedAt":512,"slug":513,"sponsored":42,"tags":515,"title":553},"wp-post-19894",[499],{"_id":500,"avatar":501,"name":504,"role":42,"slug":505},"wp-author-cap-19604",{"_type":37,"asset":502},{"_ref":503,"_type":40},"image-f8e14edd7735b5ad724714848110bf7e35d71d9c-1329x1688-jpg","Marcin Pasinski",{"current":506},"marcin-pasinski",34,"Impossibly tight deadlines, unrealistic schedules, and constant pressure to develop and release applications on time, while at the same time achieving excellent quality. Sound familiar?",{"_type":37,"asset":510},{"_ref":511,"_type":40},"image-cfb53d915cb584327b27b4749bdfc42c1de02242-2400x1260-jpg","2022-04-04T14:00:00.000Z",{"current":514},"comparing-go-vs-c-in-embedded-applications",[516,520,525,530,534,538,543],{"_createdAt":62,"_id":517,"_rev":123,"_type":12,"_updatedAt":62,"slug":518,"title":477},"wp-tagcat-c-2",{"current":519},"c-2",{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":522,"title":524},"wp-tagcat-code-for-a-living",{"current":523},"code-for-a-living","Code for a Living",{"_createdAt":62,"_id":526,"_rev":123,"_type":12,"_updatedAt":62,"slug":527,"title":529},"wp-tagcat-embedded-programming",{"current":528},"embedded-programming","embedded programming",{"_createdAt":62,"_id":531,"_rev":123,"_type":12,"_updatedAt":62,"slug":532,"title":533},"wp-tagcat-go",{"current":533},"go",{"_createdAt":62,"_id":535,"_rev":123,"_type":12,"_updatedAt":62,"slug":536,"title":537},"wp-tagcat-golang",{"current":537},"golang",{"_createdAt":62,"_id":539,"_rev":123,"_type":12,"_updatedAt":62,"slug":540,"title":542},"wp-tagcat-iot",{"current":541},"iot","IoT",{"_createdAt":6,"_id":7,"_rev":8,"_system":544,"_type":12,"_updatedAt":13,"description":546,"slug":552,"title":29},{"base":545},{"id":7,"rev":11},[547],{"_key":16,"_type":17,"children":548,"markDefs":551,"style":25},[549],{"_key":20,"_type":21,"marks":550,"text":23},[],[],{"_type":27,"current":28},"Comparing Go vs. C in embedded applications",{"_id":555,"author":556,"commentCount":565,"comments":46,"excerpt":566,"featureTag":42,"image":567,"publishedAt":570,"slug":571,"sponsored":42,"tags":573,"title":597},"wp-post-19821",[557],{"_id":558,"avatar":559,"name":562,"role":42,"slug":563},"wp-author-cap-19823",{"_type":37,"asset":560},{"_ref":561,"_type":40},"image-30620a6e0f513a4ea0f5b5c9999b0abd45a89822-48x48-jpg","Bernie Brode",{"current":564},"bernie-brode",4,"AI and nanotechnology are often seen as science fiction. But together they are finding real-world applications. ",{"_type":37,"asset":568},{"_ref":569,"_type":40},"image-20de7c86c10a6656ef5fa5cce0f68d8155f50a3a-2400x1260-jpg","2022-03-21T14:00:00.000Z",{"current":572},"ai-and-nanotechnology-are-working-together-to-solve-real-world-problems",[574,576,581,583,587],{"_createdAt":62,"_id":63,"_rev":64,"_type":12,"_updatedAt":65,"slug":575,"title":68},{"current":67},{"_createdAt":62,"_id":577,"_rev":123,"_type":12,"_updatedAt":62,"slug":578,"title":580},"wp-tagcat-artificial-intelligence",{"current":579},"artificial-intelligence","artificial intelligence",{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":582,"title":524},{"current":523},{"_createdAt":62,"_id":584,"_rev":123,"_type":12,"_updatedAt":62,"slug":585,"title":586},"wp-tagcat-nanotech",{"current":586},"nanotech",{"_createdAt":6,"_id":7,"_rev":8,"_system":588,"_type":12,"_updatedAt":13,"description":590,"slug":596,"title":29},{"base":589},{"id":7,"rev":11},[591],{"_key":16,"_type":17,"children":592,"markDefs":595,"style":25},[593],{"_key":20,"_type":21,"marks":594,"text":23},[],[],{"_type":27,"current":28},"AI and nanotechnology are working together to solve real-world problems",{"_id":599,"author":600,"commentCount":609,"comments":46,"excerpt":610,"featureTag":42,"image":611,"publishedAt":614,"slug":615,"sponsored":42,"tags":617,"title":638},"wp-post-19777",[601],{"_id":602,"avatar":603,"name":606,"role":42,"slug":607},"wp-author-cap-19783",{"_type":37,"asset":604},{"_ref":605,"_type":40},"image-cf32e68407ffea467ba815abea0b7bf795c0cab0-1657x1657-jpg","Trista Juan Pan",{"current":608},"trista-juan-pan",9,"Sharding was one of the first ways databases were distributed to improve performance. Recent innovations have made it one of the best.",{"_type":37,"asset":612},{"_ref":613,"_type":40},"image-4c360df47215f2f1c670aa7dc2b395e1969dda64-2400x1260-jpg","2022-03-14T14:11:09.000Z",{"current":616},"how-sharding-a-database-can-make-it-faster",[618,620,624,628],{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":619,"title":524},{"current":523},{"_createdAt":62,"_id":621,"_rev":123,"_type":12,"_updatedAt":62,"slug":622,"title":623},"wp-tagcat-databases",{"current":623},"databases",{"_createdAt":62,"_id":625,"_rev":123,"_type":12,"_updatedAt":62,"slug":626,"title":627},"wp-tagcat-sharding",{"current":627},"sharding",{"_createdAt":6,"_id":7,"_rev":8,"_system":629,"_type":12,"_updatedAt":13,"description":631,"slug":637,"title":29},{"base":630},{"id":7,"rev":11},[632],{"_key":16,"_type":17,"children":633,"markDefs":636,"style":25},[634],{"_key":20,"_type":21,"marks":635,"text":23},[],[],{"_type":27,"current":28},"How sharding a database can make it faster",{"_id":640,"author":641,"commentCount":609,"comments":46,"excerpt":650,"featureTag":42,"image":651,"publishedAt":654,"slug":655,"sponsored":42,"tags":657,"title":682},"wp-post-19767",[642],{"_id":643,"avatar":644,"name":647,"role":42,"slug":648},"wp-author-cap-18115",{"_type":37,"asset":645},{"_ref":646,"_type":40},"image-8cf69a05d6ef9dfd6db2ac2da2518a7d5e4b90d1-386x426-png","Daniel Orner",{"current":649},"daniel-orner","When rewriting software in a new language, how do you test that your new and old programs do the same thing?",{"_type":37,"asset":652},{"_ref":653,"_type":40},"image-110976f49a93b63fd335e9081d04f240045ce9a2-2400x1260-jpg","2022-03-09T15:00:00.000Z",{"current":656},"rewriting-bash-scripts-in-go-using-black-box-testing",[658,662,664,666,670,672],{"_createdAt":62,"_id":659,"_rev":123,"_type":12,"_updatedAt":62,"slug":660,"title":661},"wp-tagcat-bash",{"current":661},"bash",{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":663,"title":524},{"current":523},{"_createdAt":62,"_id":531,"_rev":123,"_type":12,"_updatedAt":62,"slug":665,"title":533},{"current":533},{"_createdAt":62,"_id":667,"_rev":123,"_type":12,"_updatedAt":62,"slug":668,"title":669},"wp-tagcat-porting",{"current":669},"porting",{"_createdAt":62,"_id":122,"_rev":123,"_type":12,"_updatedAt":62,"slug":671,"title":125},{"current":125},{"_createdAt":6,"_id":7,"_rev":8,"_system":673,"_type":12,"_updatedAt":13,"description":675,"slug":681,"title":29},{"base":674},{"id":7,"rev":11},[676],{"_key":16,"_type":17,"children":677,"markDefs":680,"style":25},[678],{"_key":20,"_type":21,"marks":679,"text":23},[],[],{"_type":27,"current":28},"Rewriting Bash scripts in Go using black box testing",{"_id":684,"author":685,"commentCount":609,"comments":46,"excerpt":695,"featureTag":42,"image":696,"publishedAt":699,"slug":700,"sponsored":42,"tags":702,"title":724},"wp-post-19735",[686],{"_id":687,"avatar":688,"name":691,"role":692,"slug":693},"wp-author-cap-19740",{"_type":37,"asset":689},{"_ref":690,"_type":40},"image-5413a32da6934896bd6d2b26486338a1978508f4-652x587-png","Zan Armstrong","Data Visualization Developer at Observable",{"current":694},"zan-armstrong","By aggregating our data in an effort to simplify it, we lose the signal and the context we need to make sense of what we’re seeing. ",{"_type":37,"asset":697},{"_ref":698,"_type":40},"image-820ee6cfcc5c355186824d26782a7381a3c2d15c-2400x1260-jpg","2022-03-03T15:16:22.000Z",{"current":701},"stop-aggregating-away-the-signal-in-your-data",[703,705,710,714],{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":704,"title":524},{"current":523},{"_createdAt":62,"_id":706,"_rev":123,"_type":12,"_updatedAt":62,"slug":707,"title":709},"wp-tagcat-data-science",{"current":708},"data-science","data science",{"_createdAt":62,"_id":711,"_rev":123,"_type":12,"_updatedAt":62,"slug":712,"title":713},"wp-tagcat-visualization",{"current":713},"visualization",{"_createdAt":6,"_id":7,"_rev":8,"_system":715,"_type":12,"_updatedAt":13,"description":717,"slug":723,"title":29},{"base":716},{"id":7,"rev":11},[718],{"_key":16,"_type":17,"children":719,"markDefs":722,"style":25},[720],{"_key":20,"_type":21,"marks":721,"text":23},[],[],{"_type":27,"current":28},"Stop aggregating away the signal in your data",{"_id":726,"author":727,"commentCount":416,"comments":46,"excerpt":736,"featureTag":42,"image":737,"publishedAt":740,"slug":741,"sponsored":42,"tags":743,"title":772},"wp-post-19686",[728],{"_id":729,"avatar":730,"name":733,"role":42,"slug":734},"wp-author-cap-19510",{"_type":37,"asset":731},{"_ref":732,"_type":40},"image-7c4e91f7a46bfdc5870dd420f29a964da6830fbe-1920x1920-jpg","Joyce Lin",{"current":735},"joyce-lin","How you can debug the APIs that you consume but don't own.",{"_type":37,"asset":738},{"_ref":739,"_type":40},"image-0737afecafd6c096e754b86037245ebc06d862a9-2400x1260-jpg","2022-02-28T15:01:18.000Z",{"current":742},"debugging-best-practices-for-rest-api-consumers",[744,749,751,755,760,762],{"_createdAt":62,"_id":745,"_rev":123,"_type":12,"_updatedAt":62,"slug":746,"title":748},"wp-tagcat-api",{"current":747},"api","API",{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":750,"title":524},{"current":523},{"_createdAt":62,"_id":752,"_rev":123,"_type":12,"_updatedAt":62,"slug":753,"title":754},"wp-tagcat-debugging",{"current":754},"debugging",{"_createdAt":62,"_id":756,"_rev":123,"_type":12,"_updatedAt":62,"slug":757,"title":759},"wp-tagcat-rest-api",{"current":758},"rest-api","rest api",{"_createdAt":62,"_id":122,"_rev":123,"_type":12,"_updatedAt":62,"slug":761,"title":125},{"current":125},{"_createdAt":6,"_id":7,"_rev":8,"_system":763,"_type":12,"_updatedAt":13,"description":765,"slug":771,"title":29},{"base":764},{"id":7,"rev":11},[766],{"_key":16,"_type":17,"children":767,"markDefs":770,"style":25},[768],{"_key":20,"_type":21,"marks":769,"text":23},[],[],{"_type":27,"current":28},"Debugging best practices for REST API consumers",{"_id":774,"author":775,"commentCount":609,"comments":46,"excerpt":784,"featureTag":42,"image":785,"publishedAt":788,"slug":789,"sponsored":42,"tags":791,"title":812},"wp-post-19607",[776],{"_id":777,"avatar":778,"name":781,"role":42,"slug":782},"wp-author-cap-19404",{"_type":37,"asset":779},{"_ref":780,"_type":40},"image-a1f0e7e7fcee523b7cc79f3b8faf25ee710fa440-365x359-png","Karl Wiegers",{"current":783},"karl-wiegers","If your project estimates include eight hours of work per employee day, you're gonna have a bad time. ",{"_type":37,"asset":786},{"_ref":787,"_type":40},"image-946e984c2b38fe05d215408ecb75ee7a3a3a1e26-2400x1260-jpg","2022-02-14T15:00:00.000Z",{"current":790},"work-estimates-must-account-for-friction",[792,794,798,802],{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":793,"title":524},{"current":523},{"_createdAt":62,"_id":795,"_rev":123,"_type":12,"_updatedAt":62,"slug":796,"title":797},"wp-tagcat-estimates",{"current":797},"estimates",{"_createdAt":62,"_id":799,"_rev":123,"_type":12,"_updatedAt":62,"slug":800,"title":801},"wp-tagcat-management",{"current":801},"management",{"_createdAt":6,"_id":7,"_rev":8,"_system":803,"_type":12,"_updatedAt":13,"description":805,"slug":811,"title":29},{"base":804},{"id":7,"rev":11},[806],{"_key":16,"_type":17,"children":807,"markDefs":810,"style":25},[808],{"_key":20,"_type":21,"marks":809,"text":23},[],[],{"_type":27,"current":28},"Work estimates must account for friction",{"_id":814,"author":815,"commentCount":824,"comments":46,"excerpt":825,"featureTag":42,"image":826,"publishedAt":829,"slug":830,"sponsored":42,"tags":832,"title":849},"wp-post-19556",[816],{"_id":817,"avatar":818,"name":821,"role":42,"slug":822},"wp-author-cap-19512",{"_type":37,"asset":819},{"_ref":820,"_type":40},"image-49fdf01de24bd87064e3439446c9ed66bc961fa8-1750x1750-png","Adi Gelvan",{"current":823},"adi-gelvan",10,"Databases today are built for Big Data. But what happens when the metadata is bigger?",{"_type":37,"asset":827},{"_ref":828,"_type":40},"image-d29a0fa76c628c1346f0cb73916c0f639f762214-2400x1260-jpg","2022-02-07T15:02:54.000Z",{"current":831},"metadata-not-data-is-what-drags-your-database-down",[833,835,839],{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":834,"title":524},{"current":523},{"_createdAt":62,"_id":836,"_rev":123,"_type":12,"_updatedAt":62,"slug":837,"title":838},"wp-tagcat-database",{"current":838},"database",{"_createdAt":6,"_id":7,"_rev":8,"_system":840,"_type":12,"_updatedAt":13,"description":842,"slug":848,"title":29},{"base":841},{"id":7,"rev":11},[843],{"_key":16,"_type":17,"children":844,"markDefs":847,"style":25},[845],{"_key":20,"_type":21,"marks":846,"text":23},[],[],{"_type":27,"current":28},"Metadata, not data, is what drags your database down ",{"_id":851,"author":852,"commentCount":861,"comments":46,"excerpt":862,"featureTag":42,"image":863,"publishedAt":866,"slug":867,"sponsored":42,"tags":869,"title":892},"wp-post-19496",[853],{"_id":854,"avatar":855,"name":858,"role":42,"slug":859},"wp-author-cap-19500",{"_type":37,"asset":856},{"_ref":857,"_type":40},"image-1a35ac25107b0af6163c992f8b6e7c71430227dd-1025x1025-jpg","Wayne Bishop",{"current":860},"wayne-bishop",16,"Dynamic programming isn't about design patterns; it's a way of thinking that breaks down a problem into individual components. ",{"_type":37,"asset":864},{"_ref":865,"_type":40},"image-7482240dcf294374dcdc017e05110da9547582ad-2400x1260-jpg","2022-01-31T14:48:08.000Z",{"current":868},"the-complete-beginners-guide-to-dynamic-programming",[870,872,877,882],{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":871,"title":524},{"current":523},{"_createdAt":62,"_id":873,"_rev":123,"_type":12,"_updatedAt":62,"slug":874,"title":876},"wp-tagcat-dynamic-programming",{"current":875},"dynamic-programming","dynamic programming",{"_createdAt":62,"_id":878,"_rev":123,"_type":12,"_updatedAt":62,"slug":879,"title":881},"wp-tagcat-software-development",{"current":880},"software-development","software development",{"_createdAt":6,"_id":7,"_rev":8,"_system":883,"_type":12,"_updatedAt":13,"description":885,"slug":891,"title":29},{"base":884},{"id":7,"rev":11},[886],{"_key":16,"_type":17,"children":887,"markDefs":890,"style":25},[888],{"_key":20,"_type":21,"marks":889,"text":23},[],[],{"_type":27,"current":28},"The complete beginners guide to dynamic programming ",{"_id":894,"author":895,"commentCount":565,"comments":46,"excerpt":900,"featureTag":42,"image":901,"publishedAt":904,"slug":905,"sponsored":42,"tags":907,"title":929},"wp-post-19400",[896],{"_id":777,"avatar":897,"name":781,"role":42,"slug":899},{"_type":37,"asset":898},{"_ref":780,"_type":40},{"current":783},"An essential part of requirements analysis is understanding which quality characteristics are the most important so that designers can address them appropriately.",{"_type":37,"asset":902},{"_ref":903,"_type":40},"image-0dd5235bc28d85c1aba311685ab53743d32853bd-2400x1260-jpg","2022-01-17T15:00:00.000Z",{"current":906},"plan-for-tradeoffs-you-cant-optimize-all-software-quality-attributes",[908,912,914,919],{"_createdAt":62,"_id":909,"_rev":123,"_type":12,"_updatedAt":62,"slug":910,"title":911},"wp-tagcat-architecture",{"current":911},"architecture",{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":913,"title":524},{"current":523},{"_createdAt":62,"_id":915,"_rev":123,"_type":12,"_updatedAt":62,"slug":916,"title":918},"wp-tagcat-software-engineering",{"current":917},"software-engineering","software engineering",{"_createdAt":6,"_id":7,"_rev":8,"_system":920,"_type":12,"_updatedAt":13,"description":922,"slug":928,"title":29},{"base":921},{"id":7,"rev":11},[923],{"_key":16,"_type":17,"children":924,"markDefs":927,"style":25},[925],{"_key":20,"_type":21,"marks":926,"text":23},[],[],{"_type":27,"current":28},"Plan for tradeoffs: You can’t optimize all software quality attributes",{"_id":931,"author":932,"commentCount":941,"comments":46,"excerpt":942,"featureTag":42,"image":943,"publishedAt":946,"slug":947,"sponsored":42,"tags":949,"title":968},"wp-post-19326",[933],{"_id":934,"avatar":935,"name":938,"role":42,"slug":939},"wp-author-cap-19328",{"_type":37,"asset":936},{"_ref":937,"_type":40},"image-86a0c56b829a0bbe0f28e601dd213fe0e769b7b6-40x40-jpg","Mark Seeman",{"current":940},"mark-seeman",26,"Which dependencies should be present in your code base? This article suggests an answer to that question.",{"_type":37,"asset":944},{"_ref":945,"_type":40},"image-a787256fba2cd1e1505a4a4f39eccfbe89740909-2400x1260-jpg","2022-01-03T15:16:05.000Z",{"current":948},"favor-real-dependencies-for-unit-testing",[950,952,956,958],{"_createdAt":62,"_id":521,"_rev":123,"_type":12,"_updatedAt":62,"slug":951,"title":524},{"current":523},{"_createdAt":62,"_id":953,"_rev":123,"_type":12,"_updatedAt":62,"slug":954,"title":955},"wp-tagcat-dependencies",{"current":955},"dependencies",{"_createdAt":62,"_id":122,"_rev":123,"_type":12,"_updatedAt":62,"slug":957,"title":125},{"current":125},{"_createdAt":6,"_id":7,"_rev":8,"_system":959,"_type":12,"_updatedAt":13,"description":961,"slug":967,"title":29},{"base":960},{"id":7,"rev":11},[962],{"_key":16,"_type":17,"children":963,"markDefs":966,"style":25},[964],{"_key":20,"_type":21,"marks":965,"text":23},[],[],{"_type":27,"current":28},"Favor real dependencies for unit testing",[970],{"_id":971,"author":972,"commentCount":45,"comments":46,"excerpt":977,"featureTag":46,"image":978,"publishedAt":980,"slug":981,"sponsored":42,"tags":983,"title":1000},"9f3f7612-9482-4618-a5cc-60a99695fcd0",[973],{"_id":165,"avatar":974,"name":169,"role":42,"slug":976},{"_type":37,"asset":975},{"_ref":168,"_type":40},{"current":171},"If you’ve got something you’ve been dying to share with the Stack Overflow community but don’t quite have a place to share it, we've got you. ",{"_type":37,"asset":979,"attribution":177},{"_ref":176,"_type":40},"2026-05-11T14:03:48.440Z",{"_type":27,"current":982},"introducing-the-heap-the-software-engineering-blog-for-everyone",[984,986,988,990],{"_createdAt":62,"_id":191,"_rev":123,"_type":12,"_updatedAt":62,"slug":985,"title":194},{"current":193},{"_createdAt":62,"_id":187,"_rev":123,"_type":12,"_updatedAt":62,"slug":987,"title":189},{"current":189},{"_createdAt":62,"_id":183,"_rev":123,"_type":12,"_updatedAt":62,"slug":989,"title":185},{"current":185},{"_createdAt":6,"_id":7,"_rev":8,"_system":991,"_type":12,"_updatedAt":13,"description":993,"slug":999,"title":29},{"base":992},{"id":7,"rev":11},[994],{"_key":16,"_type":17,"children":995,"markDefs":998,"style":25},[996],{"_key":20,"_type":21,"marks":997,"text":23},[],[],{"_type":27,"current":28},"Introducing the Heap, the software engineering blog for everyone"]