[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-Q9hZfwcJAuQ61b_amUtDfki8A5XFVxZGCyVRhdKrbhg":3,"sanity-P-mzpS-xtya-rlc0SwISX0MD_SujCs_QGSvqkqCJ6tw":274},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":249},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"50f4509c-4f55-4f11-8adc-5556e821ea77","2026-06-30T07:40:00.000Z",{"_type":10,"current":11},"slug","why-intent-prediction-needs-more-than-an-llm",null,"Why intent prediction needs more than an LLM",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":61,"comments":186,"dateUrl":187,"excerpt":188,"image":189,"legacyBody":192,"product":12,"publishedAt":195,"slug":196,"sponsored":12,"tags":198,"title":248,"visible":186},"2023-05-25T09:39:11Z","wp-post-12000","myT5Pq7GfgxKvTeIcgvGow","blogPost","2023-11-08T17:20:10Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"avatar":52,"employee":57,"name":58,"slug":59},"2023-05-23T16:27:18Z","wp-author-227","dgl3SCUzppW3U2LvCoP35A","blogAuthor","2023-06-20T15:05:08Z",{"_type":53,"asset":54},"image",{"_ref":55,"_type":56},"image-5df3158468f42b2e40ed766d70ce0ad6d5746955-1024x1024-jpg","reference","none","Cassidy Williams",{"current":60},"cwilliams",[62,73,125,133,141,145,153,156,164,172,179],{"_key":63,"_type":64,"children":65,"markDefs":71,"style":72},"e4d61e83468e","block",[66],{"_key":67,"_type":68,"marks":69,"text":70},"e4d61e83468e0","span",[],"When humans decided to try and land on the moon, they had to invent a lot of the technology for the project from scratch. It was hard, expensive, time-consuming work with lots of wrong turns and dead ends. That's what it's like when you're using systems no one has experience with. There are no veterans around to answer your questions when you get stuck.",[],"normal",{"_key":74,"_type":64,"children":75,"markDefs":115,"style":72},"e90d5f2e171c",[76,80,84,88,93,97,102,106,111],{"_key":77,"_type":68,"marks":78,"text":79},"e90d5f2e171c0",[],"I'm ",{"_key":81,"_type":68,"marks":82,"text":58},"e90d5f2e171c1",[83],"6ab2bfb30f81",{"_key":85,"_type":68,"marks":86,"text":87},"e90d5f2e171c2",[],", and I've been working as part of the team at ",{"_key":89,"_type":68,"marks":90,"text":92},"e90d5f2e171c3",[91],"2592d363950c","CodePen",{"_key":94,"_type":68,"marks":95,"text":96},"e90d5f2e171c4",[],". Recently we decided to switch our stack over to use ",{"_key":98,"_type":68,"marks":99,"text":101},"e90d5f2e171c5",[100],"6902c924d5ac","Apollo",{"_key":103,"_type":68,"marks":104,"text":105},"e90d5f2e171c6",[]," and ",{"_key":107,"_type":68,"marks":108,"text":110},"e90d5f2e171c7",[109],"1f5980433036","GraphQL",{"_key":112,"_type":68,"marks":113,"text":114},"e90d5f2e171c8",[]," on top of our React code, which has been an awesome learning experience. I personally love how we can organize our components very modularly, unlike the way we organized it with Redux. But, because Apollo is a relatively new technology, there have definitely been some pros and cons as the team adopts it and learns as it grows.",[116,119,121,123],{"_key":83,"_type":117,"href":118,"reference":12},"link","https://cassidoo.co/",{"_key":91,"_type":117,"href":120,"reference":12},"https://codepen.io/",{"_key":100,"_type":117,"href":122,"reference":12},"https://stackoverflow.com/questions/tagged/apollo",{"_key":109,"_type":117,"href":124,"reference":12},"https://stackoverflow.com/questions/tagged/graphql",{"_key":126,"_type":64,"children":127,"markDefs":132,"style":72},"fa1a3534d901",[128],{"_key":129,"_type":68,"marks":130,"text":131},"fa1a3534d9010",[],"When I was first searching for answers to issues I had with Apollo, there wasn’t much out there. When you decide to invest in a relatively young technology, it’s harder to find support, even for simple problems. That forces you to look under the hood for yourself, which can be a great way to learn. It also means you get to help build and shape the nascent community and reap the rewards when others begin to see value in the tools you’ve helped to sharpen.\n\nFor those who don’t know what Apollo is, it’s a single query system to help you run GraphQL at scale in your projects. It establishes a data graph for you to have all of your microservices and clients speak to each other in the exact same way.",[],{"_key":134,"_type":64,"children":135,"markDefs":140,"style":72},"8f49a953772f",[136],{"_key":137,"_type":68,"marks":138,"text":139},"8f49a953772f0",[],"It’s kind of hard to explain with just words, so let's talk through an example. In CodePen’s front-end, in a given component we might want to have data about the current logged-in user. Previously, if we wanted that information, we had to set up either some sort of middleware to handle the calls, or call actions somewhere, or just stick an API call in componentDidMount, and then make sure we make separate calls for all of the different data elements we need. At the very least, we would need to talk to the back-end team to make sure that we get the data in the format that we want. With Apollo, at the top of a component, we can plop this little nugget in here, and it will return the current logged-in user, their ID, and whether or not they’re a CodePen Pro user. The code looks like this:",[],{"_key":142,"_type":143,"code":144,"markDefs":12},"c64c363b678d","code","const SESSION_USER = gql`\n  query CreateSessionUser {\n    sessionUser {\n      id\n      pro\n    }\n  }`;",{"_key":146,"_type":64,"children":147,"markDefs":152,"style":72},"e4fb9383af8b",[148],{"_key":149,"_type":68,"marks":150,"text":151},"e4fb9383af8b0",[],"Now, let’s say I actually need more data than that, and I need to also get their avatar and their username. Instead of making another query, or contacting the backend team to get that information added to the API endpoint, I can just modify my query:",[],{"_key":154,"_type":143,"code":155,"markDefs":12},"134097a66aa3","const SESSION_USER = gql`\n  query CreateSessionUser {\n    sessionUser {\n      id\n      pro\n      avatar\n      username\n    }\n  }`;",{"_key":157,"_type":64,"children":158,"markDefs":163,"style":72},"069928b062d6",[159],{"_key":160,"_type":68,"marks":161,"text":162},"069928b062d60",[],"And voila, I have my data! That’s the power of having a single data graph. If the data is in the graph, you can query for it, and the front end is empowered to take and use that data however you want.\n\nNow, this isn’t meant to be a sales pitch for Apollo. Apollo is awesome, but it’s also new and still getting a foothold in the dev community. Normally, when something new comes out, it’s very fresh and exciting, and if it introduces new concepts for us to work with as developers, it’s a fun new world we get to play with. At least, until we run into a problem with it.\n\nOne of the things that I have run into a lot with Apollo is that its error messages leave much to be desired. They have rather generic messages sent to you, so it can be kind of tough to debug if you’re not familiar with it.\n\nSo, one day I went over to good ol’ Stack Overflow to try and figure out what was wrong with my component. And, to my shock... there were no answers there. There weren’t even many questions on the topic at all! Usually, when I ask something on Stack Overflow, I can get a good number of answers within an hour or so. I waited for weeks but got no response.\n\nBecause I didn't have an answer readily available, I had to look under the hood and actually get familiar with the code that makes Apollo work. Again, it was a trade-off. It took a lot of time, effort, and frustration. But doing it this way taught me a lot. It also helped to demystify the black box that someone else built, to give me the confidence that I could come to understand this tool as well as the creator, no matter how brilliant they seemed from a distance.\n\nMy Apollo question got a few comments, but didn’t actually get answers for over a month. I ended up answering it myself after several coworkers and I pored over the issue. Isn’t it funny how you can tell how new or popular a framework is by the number of people who have had problems with it? Vue.js has about 38.5k questions on Stack Overflow right now. React has over 150k of them. Apollo? As of writing this post, less than 5,000 and about a third of those questions are from the past 6 months!\n\nIt’s good to see that Apollo is picking up speed in the developer community. Just based on Stack Overflow questions, GitHub Issues and even Twitter threads, you can see that people are getting excited, and sharing what they have trouble with and what they’ve learned.\n\nMy action item to you, developer: when you start using a brand new, shiny technology, talk about it! Ask questions, write blog posts, share on social media, and be open about your findings. You never know who you could be helping! And the more you share, the easier it will be for other people to find you and return the favor.\n\n",[],{"_key":165,"_type":64,"children":166,"markDefs":171,"style":72},"fd8756f36297",[167],{"_key":168,"_type":68,"marks":169,"text":170},"fd8756f362970",[],"\n",[],{"_key":173,"_type":64,"children":174,"markDefs":178,"style":72},"b0a0a366196f",[175],{"_key":176,"_type":68,"marks":177,"text":170},"b0a0a366196f0",[],[],{"_key":180,"_type":64,"children":181,"markDefs":185,"style":72},"25ad0a88ea62",[182],{"_key":183,"_type":68,"marks":184,"text":170},"25ad0a88ea620",[],[],true,"2019/08/28","Using cutting edge tech can help you move fast. But what happens when something breaks and you can't find experts with an answer? There are pros and cons to being a pioneer.",{"_type":53,"asset":190},{"_ref":191,"_type":56},"image-23dbadf1cf6bbfec5188d0d1d671ff2abcc703eb-1420x920-png",{"code":193,"language":194},"\u003C!-- wp:paragraph -->\n\u003Cp>When humans decided to try and land on the moon, they had to invent a lot of the technology for the project from scratch. It was hard, expensive, time-consuming work with lots of wrong turns and dead ends. That's what it's like when you're using systems no one has experience with. There are no veterans around to answer your questions when you get stuck.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>I'm \u003Ca rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https://cassidoo.co/\" target=\"_blank\">Cassidy Williams\u003C/a>, and I've been working as part of the team at \u003Ca rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https://codepen.io/\" target=\"_blank\">CodePen\u003C/a>. Recently we decided to switch our stack over to use \u003Ca rel=\"noreferrer noopener\" aria-label=\"Apollo (opens in a new tab)\" href=\"https://stackoverflow.com/questions/tagged/apollo\" target=\"_blank\">Apollo\u003C/a> and \u003Ca rel=\"noreferrer noopener\" aria-label=\"GraphQL (opens in a new tab)\" href=\"https://stackoverflow.com/questions/tagged/graphql\" target=\"_blank\">GraphQL\u003C/a>&nbsp;on top of our React code, which has been an awesome learning experience. I&nbsp;personally love how we can organize our components very modularly, unlike the way&nbsp;we organized it with Redux. But, because Apollo is a relatively new technology, there&nbsp;have definitely been some pros and cons as the team adopts it and learns as it grows.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>When I was first searching for answers to issues I had with Apollo, there wasn’t much out there. When you decide to invest in a relatively young technology, it’s harder to find support, even for simple problems. That forces you to look under the hood for yourself, which can be a great way to learn. It also means you get to help build and shape the nascent community and reap the rewards when others begin to see value in the tools you’ve helped to sharpen.\u003Cbr>\u003Cbr>For those who don’t know what Apollo is, it’s a single query system to help you run&nbsp;GraphQL at scale in your projects. It establishes a data graph for you to have all of your&nbsp;microservices and clients speak to each other in the exact same way.\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>It’s kind of hard to&nbsp;explain with just words, so let's talk through an example. In CodePen’s front-end, in a given component we might want to have data about the&nbsp;current logged-in user. Previously, if we wanted that information, we had to set up&nbsp;either some sort of middleware to handle the calls, or call actions somewhere, or just&nbsp;stick an API call in componentDidMount, and then make sure we make separate calls&nbsp;for all of the different data elements we need. At the very least, we would need to talk to the&nbsp;back-end team to make sure that we get the data in the format that we want. With&nbsp;Apollo, at the top of a component, we can plop this little nugget in here, and it will&nbsp;return the current logged-in user, their ID, and whether or not they’re a CodePen Pro&nbsp;user. The code looks like this:\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:code -->\n\u003Cpre class=\"wp-block-code\">\u003Ccode>const SESSION_USER = gql`\n  query CreateSessionUser {\n    sessionUser {\n      id\n      pro\n    }\n  }`;\u003C/code>\u003C/pre>\n\u003C!-- /wp:code -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>Now, let’s say I actually need more data than that, and I need to also get their avatar&nbsp;and their username. Instead of making another query, or contacting the backend team&nbsp;to get that information added to the API endpoint, I can just modify my query:\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:code -->\n\u003Cpre class=\"wp-block-code\">\u003Ccode>const SESSION_USER = gql`\n  query CreateSessionUser {\n    sessionUser {\n      id\n      pro\n      avatar\n      username\n    }\n  }`;\u003C/code>\u003C/pre>\n\u003C!-- /wp:code -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>And voila, I have my data! That’s the power of having a single data graph. If the data is&nbsp;in the graph, you can query for it, and the front end is empowered to take and use that&nbsp;data however you want.\u003Cbr>\u003Cbr>Now, this isn’t meant to be a sales pitch for Apollo. Apollo is awesome, but it’s also new&nbsp;and still getting a foothold in the dev community. Normally, when something new&nbsp;comes out, it’s very fresh and exciting, and if it introduces new concepts for us to work&nbsp;with as developers, it’s a fun new world we get to play with. At least, until we run into a&nbsp;problem with it.\u003Cbr>\u003Cbr>One of the things that I have run into a lot with Apollo is that its error messages leave&nbsp;much to be desired. They have rather generic messages sent to you, so it can be kind&nbsp;of tough to debug if you’re not familiar with it.\u003Cbr>\u003Cbr>So, one day I went over to good ol’ Stack Overflow to try and figure out what was&nbsp;wrong with my component. And, to my shock... there were no answers there. There&nbsp;weren’t even many questions on the topic at all! Usually, when I ask something on Stack&nbsp;Overflow, I can get a good number of answers within an hour or so. I waited for weeks but got no response.\u003Cbr>\u003Cbr>Because I didn't have an answer readily available, I had to look under the hood and actually get familiar with the code that makes Apollo work. Again, it was a trade-off. It took a lot of time, effort, and frustration. But doing it this way taught me a lot. It also helped to demystify the black box that someone else built, to give me the confidence that I could come to understand this tool as well as the creator, no matter how brilliant they seemed from a distance.\u003Cbr>\u003Cbr>My Apollo question&nbsp;got a few comments, but didn’t actually get answers for over a month. I ended up&nbsp;answering it myself after several coworkers and I pored over the issue. Isn’t it funny how you can tell how new or popular a framework is by the number of&nbsp;people who have had problems with it? Vue.js has about 38.5k questions on Stack&nbsp;Overflow right now. React has over 150k of them. Apollo? As of writing this post, less&nbsp;than 5,000 and about a third of those questions are from the past 6 months!\u003Cbr>\u003Cbr>It’s good to see that Apollo is picking up speed in the developer community. Just&nbsp;based on Stack Overflow questions, GitHub Issues and even Twitter threads, you&nbsp;can see that people are getting excited, and sharing what they have trouble with and&nbsp;what they’ve learned.\u003Cbr>\u003Cbr>My action item to you, developer: when you start using a brand new, shiny technology, talk about it! Ask questions, write blog posts, share on social media, and be open about your findings. You never know who you could be helping! And the more you share, the easier it will be for other people to find you and return the favor. \u003Cbr>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->\n\n\u003C!-- wp:paragraph -->\n\u003Cp>\u003Cbr>\u003C/p>\n\u003C!-- /wp:paragraph -->","html","2019-08-28T14:02:32.000Z",{"current":197},"apollo-graphql-codepen-data-microservices-early-adopter",[199,206,211,213,218,222,227,231,236,241,243],{"_createdAt":200,"_id":201,"_rev":202,"_type":203,"_updatedAt":200,"slug":204,"title":205},"2023-05-23T16:43:21Z","wp-tagcat-apollo","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":205},"apollo",{"_createdAt":200,"_id":207,"_rev":202,"_type":203,"_updatedAt":200,"slug":208,"title":210},"wp-tagcat-bulletin",{"current":209},"bulletin","Bulletin",{"_createdAt":200,"_id":207,"_rev":202,"_type":203,"_updatedAt":200,"slug":212,"title":210},{"current":209},{"_createdAt":200,"_id":214,"_rev":202,"_type":203,"_updatedAt":200,"slug":215,"title":217},"wp-tagcat-code-for-a-living",{"current":216},"code-for-a-living","Code for a Living",{"_createdAt":200,"_id":219,"_rev":202,"_type":203,"_updatedAt":200,"slug":220,"title":221},"wp-tagcat-codepen",{"current":221},"codepen",{"_createdAt":200,"_id":223,"_rev":202,"_type":203,"_updatedAt":200,"slug":224,"title":226},"wp-tagcat-engineering",{"current":225},"engineering","Engineering",{"_createdAt":200,"_id":228,"_rev":202,"_type":203,"_updatedAt":200,"slug":229,"title":230},"wp-tagcat-graphql",{"current":230},"graphql",{"_createdAt":200,"_id":232,"_rev":202,"_type":203,"_updatedAt":200,"slug":233,"title":235},"wp-tagcat-stackexchange",{"current":234},"stackexchange","Stackexchange",{"_createdAt":200,"_id":237,"_rev":202,"_type":203,"_updatedAt":200,"slug":238,"title":240},"wp-tagcat-stackoverflow",{"current":239},"stackoverflow","Stackoverflow",{"_createdAt":200,"_id":237,"_rev":202,"_type":203,"_updatedAt":200,"slug":242,"title":240},{"current":239},{"_createdAt":200,"_id":244,"_rev":202,"_type":203,"_updatedAt":200,"slug":245,"title":247},"wp-tagcat-career-advice",{"current":246},"career-advice","career advice","Apollo Mission: The Pros and Cons of Being an Early Adopter of New Technology",[250,256,262,268],{"_id":251,"publishedAt":252,"slug":253,"sponsored":12,"title":255},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":254},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":257,"publishedAt":258,"slug":259,"sponsored":12,"title":261},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":260},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":263,"publishedAt":264,"slug":265,"sponsored":12,"title":267},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":266},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"_id":269,"publishedAt":270,"slug":271,"sponsored":12,"title":273},"30b995f7-7cb9-4dd8-bf71-d0685940a32b","2026-06-19T14:00:00.000Z",{"_type":10,"current":272},"dispatches-from-o-reilly-from-capabilities-to-responsibilities","Dispatches from O'Reilly: From capabilities to responsibilities",{"data":275,"sourceMap":-1},{"count":276,"lastTimestamp":277},6,"2023-05-25T09:46:48Z"]