Ep. 38 - Center of Developer Excellence with Zack Wolfson | Devs:After Dark

Zack Wolfson leads HubSpot's Center of Developer Excellence, a code-first resource that shows developers how to implement API patterns correctly. CODE uses TypeScript examples with inline explanations to prevent tech debt and speed up MVP delivery. AI agents can consume it as a prompt or extend it with agents.md files.
Chapters
I mean, now you've got subscription models. I mean, eggs as a service. I think that sounds pretty good.
I swear to God, if I see a Dennis's Eggs website or something like that, I'm getting like royalties for this. I'm telling you right now.
Hello and welcome.
Now, nobody wants to be the new kid on the block, and nobody wants to be the one that feels like they don't know anything coming into something brand new. And platforms and ecosystems are no different. You never want to be that developer that jumps in and starts to work on something and kind of feels uneasy or on uneasy ground. So what we're going to do today is we're going to talk about something that's going to help with that tremendously.
Mm-hmm.
But before we get into that, what I want to do is, as always, I want to graciously ask you if you could all please, please take a look at @HubSpotDevelopers. That is our YouTube channel. And take a look at— well, first of all, what I want you to do is subscribe, of course. And then if you got some time, there's this little section right here that I think is really important. All of it's very, very important. I mean, you're going to see things from other HubSpotters, other developers outside of HubSpot as well.
Yeah.
a wealth of knowledge here. But this little section right here that says Developers After Dark, if you could take a look at some of those and like the ones that you do like, which should be all of them except for— there was— I do remember in our analytics, there was one person that did not like, that did not give a thumbs up. And it still bothers me to this day. I want the perfect record, but I think I'll live. I'll be okay. But like I said, if you can go ahead and take a look at that, we would greatly, greatly appreciate that. So without further ado, I'm going to let our guests introduce themselves. So Zach, why don't you tell everyone who you are and what you do?
Hey, everybody. My name is Zach Wolfson. I currently lead up our Solution Architects team under our Developer Relations department. Essentially, our role is to help kind of our strategic partners and work to scale some of our impact with is what we'll be talking about today, to help translate some of the business needs that a developer is asked into towards the technical details. So kind of like marrying those 2 worlds and sitting in the middle of the Venn diagram between business and technical here. I've been at HubSpot for a little bit more than 13 years now.
Wow.
So I've seen a few things come and go and change over time, which is Very exciting. We're always changing now with the world of AI. That has only increased the pace of change. So it's a it's an exciting time still to be here, and it's an exciting opportunity, guys, to talk to to you all. So thank you very much.
And fun fact, fun fact: for those of you that don't enjoy working with me, you can blame Zach because Zach's the reason why I'm here at HubSpot.
No, you know, one of one of. I was on the interview panel, and I I did pass. AJ with a— I think it was a thumbs up. I don't think you got a strong yes from me. I can't imagine giving you a strong yes, but I wouldn't give me a strong yes.
I would say there's something there, but no, I remember you were the one who had told me about, um, the open position, and I was like, absolutely, I'm gonna go for it. No.
So by proxy, those that hate to listen to me ramble not only can blame AJ but then can blame Zach. Zach, yeah, the next degree of separation. Yes, because it's— yeah, it's a Oh, I feel bad.
Yeah, you're the response. So AJ found the link for me for my job when I first started working here. So basically, it all comes back to Zach.
Zach is to blame for everything.
Actually, what I heard there is Zach needs a raise because look at all the people that are coming in through my influence.
That's a lot of referrals.
Contributing positively. Yeah. So basically, welcome to my podcast. This is it, everybody. I'm responsible for this whole thing. I'll be taking over from now on. Okay. Nick, can you tell us about your role and when you joined Netflix?
I love to talk.
I love to talk. So I have no problem doing that. But let me bring this up because I want to share this as well. Because as part of this episode, there's something in particular that we definitely want to talk about. And I'm going to bring this up. So as I ask the first question, that way it'll make a little bit more sense for everybody. But this episode, I really want to cover the Center of Developer Excellence, right? CODE for short. And one of the first things, and obviously those who aren't familiar with it yet, Zach, what I'd like you to be able to do is if you can just explain to people what is the Center of Developer Excellence.
Yep. So the Center of Developer Excellence is our attempt at basically scaling the, here's how you interact with HubSpot's APIs. And the problem it was designed to solve was we kept having to explain to people over and over again, like in our conversations with partners, okay, hey, when you go, you you know, you want to do an upsert operation for a contact, right? Well, the V3 endpoint did not have an upsert endpoint. So we have to say, okay, actually what you have to do is you have to go get by email address, get the ID back, and then you can update by the ID. This was before we supported grabbing by unique property value. In our API. So there were a bunch of these kind of like how to make it usable or how to make it solve your problem for APIs that our current documentation didn't answer. The documentation did a great job of once you knew what you needed, like which API and how to use it, they could tell you all the options and what they were and what query string parameters you needed. But it didn't get you to the first step, right? It was like, okay, I need to sync contacts. How do I do that? Like, oh, okay, that's actually quite a— there's a lot to that. And so we started out to try and demonstrate what that is. And we chose the NAME code because I think it's a clever acronym that I can take zero credit for. One of our brilliant tech writers, came up with it, I kept calling it the Developer Center of Excellence. And they're like, why don't you just change it around? So it's just CODE. I was like, that's cool.
Yeah.
But the content of CODE is code. It's TypeScript code in this case, because we wanted to speak to developers in their language. We could describe a lot of things in English, But a lot of times you just want to see exactly, you know, what the flow is, what you need to check, when and where. And that makes it just much easier for a developer to see themselves using it and understand how it's meant to be used there.
Would you say that's a problem? Oh, go ahead.
Sorry. No, I'm looking at your code is evergreen, like on the screen right there. And I'm curious to know how you maintain that because, you know, there's a lot of evolution happening right now. And I imagine that maintenance is not trivial.
Yeah, it's, it actually, it has been a little bit trivial because we haven't actually updated it since we published it. So no problem. But, you know, as we move towards new concepts and really our platform is undergoing a pretty fundamental change right now as we move to kind of project-based development versus kind of the more API metadata-driven kind of development cycle, we'll have to update this to account for that new world. You know, for the current set, it actually mostly still applies. I think there may be one or two things we could change, like, but like the upsert by email address flow, that is still like the correct way to do it. We'll have to update a little bit of the getting started guidance or things to kind of change how that works. And one of the things we really want to add to this is kind of support for the new webhooks platforms.
Mm-hmm.
So kind of one of the things on our radar to support next, because I think it's set up to be one of the more powerful syncing mechanisms, which is like, how do I sync is basically the question almost every integrator asks here, especially in the world of I'll term second-party apps where they are their own kind of software platform building an integration for our marketplace, in our marketplace for our mutual customers to be able to use both pieces of software together. You need some kind of a shared state between those 2 pieces of software and that bidirectional sync. You know, that is the key problem to solve. And if we can get that kind of plumbing out of the way—
Sure.
Then those developers can focus a lot more on the added value and making sure that the customer experience really is exactly what they intend it to be.
And I mean, you say it's all code, but is it— it's the how. Is there also the why included? Like why this is the best way to go about it?
Yeah. So we We chose to put these in mostly as comments for the inline here. So as you're reading it, it's meant to kind of explain the rationale. There's also parts we'll comment out that like, hey, acknowledge this is hand-wavy.
Right.
You know, when we're saving things to the database or we are, you know, queuing up an async process, It's not actually like creating a queue in Kafka or anything like that and having a ZooKeeper stand up. It is like, okay, here's an in-memory queue, like, but you're not gonna really do this in production.
Right, right.
That's not the point of it. The point of it is to show the specific interaction patterns with HubSpot's APIs. So we try to keep it scoped down like that. But yeah, we tried to cover a lot of the whys to help people understand the trade-offs. Because even though we think these are the best practice patterns, they will never apply to all cases. So it's important for somebody to understand when they should diverge from this because their needs are not that of the majority, or when they should kind of stick to these best practice patterns so they don't run into edge cases later.
Well, that's a great question, actually. How do you determine, like, how do you water it down enough without being too watered down?
It comes down to judgment, right? And this is a kind of a formation of just having talked to developers for the last 13 years specifically about, you know, working with HubSpot, right? Before I was in product, I started HubSpot as a sales engineer. And, you know, there we were talking to the technical stakeholders. A lot of the enterprise businesses, they would have an in-house system, something like that. Mm-hmm. You know, back in the day, some of them were still like on-prem and, you know, we had to help them figure out, you know, how to use our API to meet their needs back when our API was quite a bit less mature. And so, you know, kind of going through that and then, you know, leading the SE team for a while and then coming over to the product organization and talking to kind of developers that played in our marketplace versus those that were for direct customers. there were some very clear like patterns that emerged of like, these are the points that people struggle with.
Hmm.
And it's the like, I can do this in XYZ platform, but I can't do it in HubSpot. It's like, okay, well, you just need to change the way you're thinking because you have to keep in mind what these APIs were originally designed for. People start assuming all APIs are designed for their use case. And that's just Not the case. You know, we would like to be able to serve every use case that we wanted, but it, you know, it doesn't always pan out that way.
Sure.
So like when we're saying here, okay, like HubSpot's APIs were really designed when HubSpot was not the source of truth, right? We were first a marketing company that integrated with like Salesforce and other like CRMs. I mean, they were the 100-pound gorilla in the room, certainly when I was starting at HubSpot. And they, the CRM was always the source of truth. Then we created a CRM and, you know, as it matured and more people used it and CRMs started to become more the center of the technology universe for, you know, IT department, for an operations group, people really needed to trust this. Our product evolved and our platform, our development platform is now kind of catching up to that and making it A little bit smoother for that use case. But while we've transitioned, I've noticed some clear kind of pain points around managing it for a bidirectional sync that aren't apparent if you don't think about why it was designed. Once you understand it, it's actually very simple to kind of reason about. It's a good API. Like, I'm being very critical of it because, you know, I don't know. That's just, I'm a critical guy, I guess. But I think the, to Dennis, to come back to your question here, like how do you know how much it was? It really comes down to a gut feel. I'm not gonna say, or this is like a science or like I, you know, went out and did a massive survey and measured like, okay, here's, you know, what 80% of the people need to do. And I think that's okay because the great thing is It needs to grow, right? It needs to continue to live on. And so, even if I was 100% wrong on that, like, what is the right level of abstraction for this, then, okay, I missed.
Great.
That's a learning for my experiment. And then we change. So, I was like, okay, let's see what people are valuing. in here. So we keep a close eye on the metrics, like, are people forking it? Are people kind of downloading it? Are they saving it, all that? So, and then kind of correlating that to kind of other activities downstream to see, you know, is this actually helping people? Is this really adding value? Yeah, that's ultimately what we want to do.
Nick, I yield the floor.
Now, I was going to ask, is Code designed for Like the lone developer, or is this something that like enterprise-level, like engineering teams can also take advantage of?
Yeah, absolutely. It is. It's not specific to the, the, the company that the developer works for, whether they're an independent contractor or in-house developer at a large enterprise or a solutions integrator. The kind of the— what it was designed for is, regardless of who you are, in your stage of becoming a HubSpot developer, you have now been given a, like, a statement of work from a business, you know, leader, user, or a set of kind of requirements to go evaluate if they're still in that phase of the process. But maybe you are not actually familiar with HubSpot's platform yet. This is designed to be the fastest way to kind of bridge that gap without having a bunch of trial and error in here. So I was like, let's take care of the basic things that like everybody needs to understand before they get going. And in this case, you know, it's, it's the HubSpot framework. It's how to work with objects, how to work with associations, and then, you know, kind of property mappings and those properties about the objects as well. So kind of working through how to do that in a, you know, not quite the simplest form where it's a single object, you know, only contacts, always unique email addresses, right? But also with like companies and deals and showing how kind of those associations work. But we're not going to like the nth degree and having like 100 custom properties, you know, within there. So That's where it's kind of designed to kind of help us play here.
Now I—
oh, go ahead. Yeah.
Yeah, so I mean, the AI, I love vibe coding. I have the editor open, but I very rarely actually Typecode these days when I'm writing this. Now, just for context here, this was the Center of Excellence was created and published before the like the massive AI coding wave hit HubSpot. He was around for sure, you know, but Cloud Code was not like a mainstream tool in the developer toolbox here. And so I think looking at it now through the lens of AI being here and here to stay, at least in the development world, it seems this is a great starting point. It's additional context for an agent to consume, right? The agent is great at reasoning. And finding patterns and looking for kind of that needle in the haystack. It's not great at finding specific like facts and figures. Like it'll make stuff up. Like when you ask it, like it wants to satisfy your answer, but you say, hey, show me like the patterns of APIs or like that's part of the coding and the core, the base prompt, excuse me, for Claude Code is like, hey, go Do a research step and say what are best practices here. So the the idea here is this could be fed in as you know a the result of a tool call or web search. They find the repo. It's like cool, you know Claude, you know and and similar agents here like Codex or I'm blanking on oh the Gemini CLI. They could come here and say, okay, yep, I understand what to do here. In fact, I'll tell you the first time I used the Gemini CLI, and this was on my personal account because I'm a Google fanboy and I bought a Pixel phone and they threw in Gemini with it. So I was like, all right, let's try this out. I pointed it at the CRM Object Sync repo and said, hey, stub out a basic integration with, um, my brother-in-law, uh, manages a golf course. And so he was complaining about their, uh, POS system, um, not syncing up with their, uh, e-commerce website. And, you know, haven't everybody in this room heard this story before? Like, man, I wish all these talked better together. And I was like, I don't know, I bet I can throw this together real quickly. Uh, so it says, hey, Use the CRM Object Sync as a background. Now I knew it, so I pointed it there directly. Said, okay, here's the other system. Read their documentation and you know get a basic kind of bare bones thing working where you know members show up as contacts in HubSpot and all their e-commerce orders show up as deals and line items and will sync to product libraries from. They used one of the WordPress e-commerce powered sites. I'm blanking on which specific technology they used, but like in one shot, it basically got a minimum viable product working, which was pretty cool. That's very cool. It was able to follow the patterns that we explicitly wanted it to. Like it understood the whys. So that was some great validation for me.
Yeah.
Yeah. So, and I think so it's like, it's not either or, it's and, like with AI, this is both an input for AI and I think very shortly will become an output of AI, right? As we work to kind of scale this and say, okay, what if we take on, you know, more and more you know, kind of complex use cases and move more towards the, the long tail of it here so we can serve kind of more audiences here. We can iterate on these kind of base patterns and throw like extension points in there really, really fast with tools like Claude Code and the rules that, you know, we've written down that drove this in the first place. Like once something's written down, That's all you need to do to make it useful to AI. And it's always been incredible to and those together.
Would you consider having a, sorry, an agents.md file type thing in the Center of Developer Excellence that would be specific to the HubSpot ecosystem?
You know what, I think this is one of those where I would probably opt to incorporate it as like a an optional tool or a set of instructions for the, you know, like the developer MCP, the HubSpot developers MCP, where somebody could bring it in. It's maybe built into the CLI as a, when you initialize something, it's like, hey, do you want to start a, you know, a Claude MD file, a Gemini MD file that kind of tells it about it? Mm-hmm. And one of the first things you would do is like, hey, cool. If you want to start the sync, like check these resources here. And you want to say that pretty succinctly here. I wouldn't describe all of it here. Reducing token usage is one of the things that I think is because I've been kind of protected within HubSpot's walls and they pay for everything. I essentially have unlimited tokens, right? So I was like, oh, okay, this is great. Just be very explicit. and verbose. And she's like, okay, that actually doesn't work for like a, um, a personal paid Pro plan. You very quickly hit—
Oh yeah.
Um, context usage limits. Um, so how I would incorporate it there, um, I probably need to do a little bit more thinking about it, but I think a little pointer of if you find yourself needing to know how to sync, check here. Nice.
Yeah, I mean, I know, I know when you, um, create a project now, I believe it does automatically build an agents.md file when you do that. So maybe it's, maybe it's irrelevant, but, uh, maybe I was overthinking it. I don't know.
Yeah, we certainly provide more explicit instructions.
We could, yeah.
Um, and this is a great way we can experiment, iterate.
Yeah, yeah, yeah, for sure.
Is this helpful? Does this actually help people? make their first API call faster? Does it help them get to MVP faster or, you know, with less frustration along the way?
Now, let me ask you—
Do you—
oh, go ahead. I'm sorry, Nick.
Oh, I was going to say, I scrolled down a little bit here and, you know, you started out here with the, you know, CRM object sync and a couple of other of these blueprints. Was there a— what led you to start off with these as like the base? Because I mean, again, like you said, this is something that can be iterated on, built on. Um, but whether— were there specific reasons why you chose these, uh, repositories to start off with?
Yeah, these, um, so talking about objects, properties, associations, this is the core of the CRM. This is what drives the actual, like, infrastructure of HubSpot. This is the HubSpot framework. Like, everything in HubSpot is pretty much a CRM object, a property of an object, or an event. An association, maybe with a label between either 2 objects or an object and an event type, or it's an event, right? That's the one thing that we don't have yet on our core use case here. And there's some reasons for that, not least of which is that the, for quite some time, the Event system at HubSpot has been undergoing pretty fundamental changes to move from mutable events to complete immutable events. And that's taken some time to make its way through to kind of the public API. It is actually now here. The integrators timeline API that is hooked into the project system is that like new system. So the time is actually probably— Either very soon or now to add that in because it's the last fundamental part of kind of the CRM. And then we can start to talk about how do you add, you know, extension points, right? How do we add an app card that utilize— that works kind of with this? So the kind of end vision of this would be a set of kind of specialized Docker containers that can all be composed together, you know, in a single YAML file. And one of the, like, going back to kind of how this can play with AI, one of my, like, you know, crazy ideas that I've had is like, wouldn't it be great if you could just talk to AI? It could read this, say, here's the base. Let me create a few more containers based off of your special needs on top of this, and then spit out a Docker Compose file that kind of uses everything, and you're just, you're off and running. You hit, you know, you hit play, and it goes, right? And then you can upload it to, you know, any of the number of hosting providers that support Docker containers.
Nice.
Question I had for you was, and I'll stop sharing this now, because that was very, very cool. If I'm a startup, like I'm trying to think of like a scenario here. If I'm a startup and I'm just joining HubSpot, now you already mentioned with the token usage, right? Being able to reduce that obviously is a benefit because unless you have unlimited funds and we're in the real world, that's going to have an impact. But how much time— can you talk a little bit about like the time that this shaves off of like the entire like development cycle? Being able to use code?
It should eliminate a lot of the investigation or guesswork, right? So there's, there's 2 types of developers. There's the ones who will read the docs and there's the ones who will not. And so for those developers who read the docs and you kind of look at this visually, it will give you kind of a a shortcut to, okay, like, don't use the CRM search API for driving your sync logic. When you first look at the reference docs, like, it looks like it's perfectly made for that, right? You can just say, great, show me everybody whose last modified timestamp is, you know, greater than the last time I looked. Well, there's a lot of limits on that system that prevent that from being the appropriate kind of case here. Now, if you go right to code, you're like, hey, it's not using the Search API. I wonder why that is. And we can go through and like in there, it will see, it will show you why. It's like, hey, otherwise you'd hit this limit. You can't scroll past 10,000 records because, you know, details behind the scenes, it's backed by Elasticsearch. It's kind of a fundamental part of their system. And then for the doers, the ones who are told to RTFM over and over again, but never quite seem to, you know, this is a starting point. It's like, just show me what, like, okay, how do I actually do this? Like, these little snippets are fine for a single call, but like, I'm not making a single call here. Just like, where do I get started from? And this provides a nice, like, base. It's meant to be a launching platform building off of. So I hope it does save a significant amount of time for all of the developers.
I was thinking, I'm sorry, Nick.
No, no, go ahead.
One question here. And this is a bit larger. I'm going back to when you set for your, the golf, the management there, right? The sync there. And you were able to get that together in, you know, pretty quickly, right? An MVP pretty quickly. You know all about HubSpot. Like, you know the inputs, the outputs, all the good stuff that needs to go into it. If Nick's question about like a startup is getting started on HubSpot, what is the correct path for the developer to actually start really being able to get to that MVP?
So the first thing is, you know, it has nothing to do with HubSpot, but like defining what your core customer value is. Like, why are you creating this? Too many people rush into the how before the why is decided. And then so when you are making these architectural trade-offs, you don't have like a measuring stick against which to weigh the trade-offs, right?
Boom.
So in that example, right, the core thing that we wanted to be able to do was create a unified kind of customer profile. So the key part was making sure that if nothing else, the contact information and things that they have purchased as well as their membership status could be represented in one place. In this case, I chose to have that place be HubSpot, and that was how I kind of told it to drive the syncing direction and how to apply some of the patterns that we have in the Center for Developer Excellence. So once you have kind of what your core customer value is, then you can get into, okay, like, what's the best way to do that?
Mm-hmm.
Now, because this was a fairly common case, right? This was, again, like, I think 80% of the startups who are coming to us are likely needing to create a unified customer profile. That is a very common need for a lot of businesses here. And that's where the Center of Excellence really kind of is meant to be used. You come there, you say, great, let me point my coding agent to it. Let me read through it. Let me download it, whatever your preferred kind of method of development is and kind of start from there. You kind of give it the business use case and then you can start to kind of apply that. Okay, I need a custom property here. I need, you know, a new association type over here for my case, but like these principles all still apply.
Yeah. I'm sorry, I'm gonna dig in a little bit more here. I was thinking about when I worked for an agency and I Was brought into this agency, never heard of HubSpot, so I had no idea what I'm doing with that, right? But I can code, I can code just fine. I didn't really know the why, and I was eventually be able to figure that out. But I'm thinking more modern days, contemporary right now, with AI, I feel like you might lose that step because you just ask AI to do it. It does it in a sense, but you still, you don't have the foundational skill or the understanding to really know why. if it's going down the right path or not. I'm not sure if this is a question or just a comment on my part, but like, what would you recommend the new engineer to be focusing on initially? Yeah.
And this is actually something I think not just people integrating with HubSpot, but also the engineers who build it, something we emphasize internally is using the product. Go into the UI and be like, what does a contact profile actually look like? I see, you know, 3 columns here. It's like, well, they each have a specific purpose. And that will tell you about like the type of data that we have about it, right? So you can see, okay, here, left-hand side is all of the properties, the things that describe this particular record, right? Then you've got a timeline of interactions for that object. If it's a contact, it's, you know, all the emails they've opened, all the, Um, you know, website pages they visited, all the, you know, sales conversations they've had. Companies is going to be, you know, funding events and kind of other things like that. Deals will be, you know, when they transition from one stage to the next, that timeline. And then kind of right-hand side is, is typically the associations, um, for, for that. And I'll say, okay, here's what is related to that. Um, and it's like, okay, this is a CRM. It is a contact relational management, right? It is about the relationship between these entities, the graph of your database essentially, that provides the value to the people using it. So now that you can like the way you kind of see it, that can be a nice shortcut here. Now that's not the only way to learn HubSpot. I think we've got some fantastic content on our academy. That walks through some of these basics here. I am a click-around kind of a guy to learn things. So that is where I will navigate and, you know, kind of start from. But, you know, I know some people love to start with like a video or, you know, a podcast, you know, overview here. So maybe I'll have AI turn code into a podcast. I don't know. Let's see. Why not?
I know a host.
So yeah, I think that's the, the thing, try to use the product, right? We offer free trials, free dev accounts, free accounts, right? So just like, go knock around in it a little bit, see what it feels like. And that'll give you a much better place to start from when you are going back to the business user and saying like, hey, you know, we could do this or this. And by the way, these are the implications for that.
Mm-hmm.
It's like, okay, if we do this, that means you can report on it this way. If we do it that way, you get, you know, better visualization of it, but you can't get the reporting. Um, so starting to kind of understand.
That's what I'm talking about. Yeah.
Yeah. And I think what a lot of people probably don't realize is that like when they retain agencies and stuff like that, that whole like learning process is kind of baked into the billing. You know, there, there's a lot where like sometimes you work on a project and you'll have developers in an agency on a project where like they've never done that kind of a work. So they do need to dive in and do that. I remember when I was building HubSpot sites at first too, I didn't really know what it was capable of until I dove in and I was like, I'm going to break this product. And then that's the first time I'm like sending like a million messages to Zach on the old, you know, dev Slack OG days and stuff like that. But that's where like, honestly, like exploring that product, I think is a huge first step for anybody because how are you going to know where things sit? Or like you said, Zach. 3 panes, right? On the, on the CRM thing. Where can you put the data? Where did, what does it look like?
You need to know all of that.
It's safe to say, like, I, I obviously I am sold that this will definitely shave off time, like from the, from the onset of everything. Now, AI aside, cuz AI can take anything and push it off and, you know, hallucinate and whatnot. But is it safe to say too though, that this also helps teams like avoid building up tech debt? Because it's setting like such a good example and a good precedent at the start.
Exactly.
This is like what I always tell kind of developers when we have kind of one-on-one conversations is please ask as many questions as you can think of now because it is so much easier to change direction and like update the architecture when nobody's using it. As soon as you actually have real users, like it is way harder to change your approach. So I've had people who have come to me like, well, we're starting to hit the limits of the Search API. We want to think about moving to webhooks to be a little more scalable. It's like, okay, here's your migration path. And it would have been a lot easier if kind of we started off on the right foot, which was a big motivation for kind of creating this resource. And selfishly for me, it's like, I do enjoy hearing myself talk, right? I've been told I have a radio voice. It sounds nice.
Perfect.
You know, I have a little bit of an ego. Fine.
I've been told I have a face for radio.
I want to try to avoid kind of repeating myself too, too much, right? So, okay, like selfishly, let's, let me send them a link instead of saying this, you know, for the 10,000th time. But on the, you know, a little bit more seriously here, the truth is we just won't have the time to talk to every developer who will have a chance to add value to our customers. And so, this was designed as a way to kind of short-circuit some of the back and forth, the guessing and checking, the naive assumptions that you wouldn't know about unless you are experienced in the platform that would lead to tech debt.
Yeah. Excellent. Let me ask you a question about the future of all of this because, I mean, You're actively now soliciting feedback, right? Through, you know, through code. Is there sort of a— I guess the best way to ask this is, is there like a— I call it like an aha moment, right? Is there anything that you've gotten back thus far that you've had to kind of had to rethink some things or, you know, things that come from the community where you say, oh, you know what, I hadn't really thought about that. That's a really good— have you gotten any of that kind of feedback yet?
Not Zach.
No, I think one of those, and this is more of a, it's less on the technical side and more on the kind of business management side of things. The silence that we have received back has been deafening. And, you know, I was like, okay, great. We'll measure it by, you know, forks. Because that'll be my top measure of engagement. That's really what I want here. If we can see people engaging with it, then, you know, it turns out actually most of the activity has been cloning it. And we didn't have telemetry set up ahead of time for that because I was, you know, okay, cool. I'll pick this metric and I'll go with it. I'm going to be decisive.
Hmm.
Businessman, right?
Okay.
That turned out. Now we're missing a lot of signals for usage and we'll get that kind of wired up. And I think what that also tells me is just being a good product or a good resource is not enough, right? You have to talk about it. You have to do marketing, which kind of ironically was actually my major in college. That's where I started. I was not a developer or anything like that. learned to code kind of more on the job. But I was like, oh yeah, like, I do actually have to, like, you know, tell people about it and, you know, introduce people to it and kind of start to do a little bit of convincing. It's not just, wow, this is so amazingly valuable. I just have to use it. I'm gonna tell all my friends about it. It's like, no, that's not really how this works. So I kind of put it out there and then didn't say much of anything about it. And I was like, okay, well, let's see what people want. And now that I kind of have a little bit of a time and this now has some new use cases for it with AI being what it is, that it's becoming more and more intriguing to kind of revisit this and start some new experiments and see like, okay, Let's see what happens if we kind of inject it over here. What's this? Maybe we do a little bit more explicit for, you know, how people interact with it. Maybe it's something I can use and offer up as a resource for our community mentors and be like, hey, let me train you on this. So if it comes up in your mentorship roles in a technical capacity, you have this kind of knowledge, you know, locked and ready to go. You don't have to like read about it yourself. I'll kind of, you know, hand-feed it to you. And then, you know, if anybody has any feedback about how it could be more useful, you know, that's one of those things. So thinking through the kind of promotional strategy and how that impacts our ability to iterate and make it more useful over time was one of the big learnings. I know it sounds obvious, like, oh, you have to like market your product. It was like, I just like, I don't know, miss that section.
Yeah, yeah, yeah. That's fair. Let me ask you this.
All the time.
Sorry.
Go on.
What's that? No, what's that? I said nonsense.
It's Field of Dreams all the time.
Just build it. Build it and they will come. Yeah.
Oh, absolutely. I wish it worked that way. That would be nice, wouldn't it? Now let's, let's do a little bit of an exercise, right? So if I'm a developer, let's say my name is Dennis and I'm kind of, I'm kind of green. I don't really know, you know, what I'm doing yet. Make a lot of mistakes, things of that nature. Uh, if I'm coming to— I'm a park ranger. Yeah, I mean, that's fair. Um, if I'm coming to this site right now, right, can you tell me like what is the first thing I should do? Sell this to me. If I'm coming here for the first time, like what is the first thing I should do when I get to this site?
Yeah, well, so, okay, so you want me to sell? I'm gonna go back to my sales engineering days. Um, tell me what you're trying to accomplish. Um, I can't sell anything to you until I know what your goals are.
I'm, uh, I have a chicken farm, right? And I sell eggs. And what I'm trying to do is I'm trying to better organize my inventory, and then I'm trying to better promote and sell my grade A jumbo eggs.
God, you know me well.
Awesome.
Well, first of all, let me just say, Dennis, Excellent use case for this resource here. Yeah, I had to. What do you think I was going to do? Mix it up and not make a scrambled joke in here? Okay, no. So first, we're going to break a few eggs when we make an omelet. That one didn't fit at all. I'm just on, you know, I'm just rolling here. But, you know, I think when we talk about what you want to do here and managing your inventory, this is a great piece where like, Hey, I don't know if he does. HubSpot actually can manage that. We've got a product library. You can say, here's my, you know, eggs, and you can update every morning how much you have in inventory when you go, you know, visit the coop and take the eggs out and, you know, get them cleaned up into cartons.
Right.
Make sure that the quantity is updated here in HubSpot. And you know what? Let's talk about kind of crazy ideas, right? So I've been getting into home automation recently. So I love the idea of sensors and running like a Home Assistant server. So yeah, you've got your kind of backyard farm set up. You've got, let's say, you know, like a Square widget that you can take kind of credit cards from as your front end here. So everybody can pay on it. Maybe as the, you know, kind of the chicken eggs kind of come out here. You've got a, you know, a sensor that it breaks as it kind of rolls down here. So it just counts it up. Well, that can just fire off API calls to HubSpot and say, okay, great. Now on, you know, whatever, wherever the Home Assistant server is located, whether it just be something locally or you've exposed it, you can go through and you kind of update that. And then every sale that comes through, Square or you've got Stripe, right? Whatever your payment platform of choice is or however you're running your POS, right? Have that automatically come back into HubSpot. And then pretty soon, you as a little, you know, chicken coop here, you can create a website that has a complete profile of Your buyer, they can go in, set up a subscription. I mean, now you've got subscription models. I mean, eggs as a service. I think that sounds pretty good.
I swear to God, if I see a Dennis's Eggs website or something like Zach's gonna be getting like royalties for this. I'm telling you right now.
Oh my God, Zach, you've sold me on HubSpot as a shell company.
Okay, that was that was that was the last egg. That was good.
That was good. You sold me on HubSpot.
Probably more.
Sell me on code now. So so we got we. Okay, I get that. Now, how do I use— how do I employ code? I'm sold. I'll take HubSpot. I got it. Where do I go from here?
Yeah, so now the question is, is the how, right? All those API calls, right? That was really hand-waving. Oh, let's have a point-of-sale system talk to HubSpot. Let's have our inventory system talk to HubSpot. It is not that simple. And for every, you know, business user who wants to just tell developers to just do it, I promise you it is not that simple. There are like so many things that can go wrong. Here. So this is where you start to say, okay, I need to sync this information from one system to another. Contacts are CRM objects here in the HubSpot kind of lingo here. So let's go view that repo and see what we're supposed to do and kind of, you know, create, download that container and run it and, you know, see what happens, right? It's got the authorization kind of flow built right into it. We know exactly what scopes we're going to need based on our use case. And then you're kind of off and running, already using kind of the best practices. And then you just kind of like build on from there, depending on the specific needs here. You know, in this case, like, we didn't have an example for the products object. But, you know, it's trivial to kind of copy and paste what we have for companies and do it for products. Like, a CRM object is pretty much a CRM object is a CRM object.
Mm-hmm. That's excellent.
Well done.
I love that. No, I, I'm telling you, like, Dennis, you better be giving some royalties after you set all this up. I mean, this is gonna be— this is key. This is very key. Let me, uh, let me ask you this. We kind of, um, let's get to know Zach. Okay. Um, now you've been at HubSpot for, uh, you know, 13 years, right? Just about. Is there a piece of mentorship advice that you've gotten that kind of has either stuck with you or that's been a cornerstone for, or that you've passed on to other people? Because I imagine too, maybe it's even advice that you've given other people because after being at HubSpot for so long and knowing as much as you do, it would be very hard not to imagine that you haven't Given advice or mentorship to others as they've come up through the ranks in HubSpot?
Yeah.
And I will say, you know, this answer has changed over the years. But I think recently one of the things that has kind of helped me a lot, and I think I would— I think this would help everybody nowadays, is embrace the change. You know, okay, sounds easy. How do you do that? The first step is separate your identity from what you're doing. What you're doing is a factor of what the business is asking of you right now based off of the environment and based off of customer needs. All of that will change. But None of that impacts your value as like a person, an individual, or at least it shouldn't, right? We often confuse that and be like, hey, oh man, I'm not being asked to do this thing that I was really good at before or that I was very comfortable doing or it was easy, whatever the, you know, why you enjoyed it. But now I'm being asked to do something else. That's great. That's a new opportunity for you, the person, to add a new skill set. Yeah. Not something being taken away from you. Change is coming for everybody. AI will change our roles one way or another. We have not seen the end of that change. The way buyers are working, the way businesses are operating, things are changing. The regulatory environment will always change and adapt, right? So be ready for that. And I think that is the mindset that has allowed me to have some staying power here at HubSpot is things have changed and I've both explicitly switched roles over time and I've also had roles switched on me over time. Things have evolved. I don't know, my original vision for the team I lead now is very different from what we did last year. It wasn't wrong. It's just the business around us changed. And so we needed to adapt with that to make sure that we were, you know, doing what HubSpot pays us to do, which is add customer value and help millions of organizations grow better. In this case, it's through our interactions with developers and making sure that they know how to extend the HubSpot platform and make it even more useful for our customers through App Store Marketplace. The direction integrations, whatever it is. And so embracing that and holding onto that as a core tenet of how I view myself and how I view myself in relation to my work has given me much more adaptability than I had also before this realization or aha moment epiphany.
Now, in this world of constant change, uh, do— what kind of, um, I, I guess the question that I'm looking for here is, as far as like, what, what do you see as like the next big steps for code? Like, in your mind, if you like, all roadblocks aside, like if there was infinite amount of whatever, right? Like, for you, for the future of code, like what do you see as the next big thing?
No idea. It is going to depend on the feedback we get, right? I have my opinions about what I might do, but those are useless, right? Those are things that might add value for me, but I'm not the target user here. I don't know my audience better than them. I'm not Steve Jobs, right? Steve Jobs can say, I know the phone people. Right? I'm not going to listen to you, right? Cool. He's one of one. I need to lean in on what the kind of the user research says, what feedback we get to understand where this could be kind of more valuable as people start to use it. What are the friction points they're running into? What are the problems that we haven't solved for? What are the things that like everybody's adding on themselves that we should just make it a core part of kind of the base of it. So, where is all that coming together? So, I have no idea on what it could be. You know, I originally conceived of this as a, like, you could take all these containers and have a production-ready app by just kind of composing it together. I don't think that's where we're gonna go, but I do think this can be, you know, I wanna experiment and see Can it be used as a start of a prompt for an agent? Should there be a dedicated coding agent that you can talk to that is kind of powered by this context and very specialized in this particular knowledge that could either be, you know, brought into another ecosystem as a tool via MCP or as agent-to-agent direct collaboration using, you know, Google's A2A protocol? There are lots of different ways this could be used. And I don't know what it's going to be until we start really kind of looking into kind of the signals and the usage. And as, you know, the platform evolves, people will struggle with different things, right? You know, if we simplify kind of OAuth and make that kind of a lot easier, okay, then that's no longer an important part to kind of include here. It's kind of like, okay, everybody gets it. Now let's turn our focus focus to, you know, working with labels. It turns out everybody struggles with association labels. We need to spend more resources kind of advising on kind of how to use that and what it means to apply a meaning to a relationship between 2 entities. And as, you know, our platform features get more and more integrated throughout the entire product, The trade-offs change. So we have to kind of update there. So to answer your question again, like, I don't know, there's a lot of different things we could do. What we will do is entirely dependent on what our constituents, our target market tells us.
See, fundamentally speaking, you have a mission, right? And you will stick to said mission. Is that something that is as flexible as like what layer 2 is on top of like, you know, code examples, for example?
Not necessarily. You know, it's— I'm not married to it, right? I invested a lot of time into it, but like, I'm also— I've separated myself out from it. So if it turns out this is no longer useful, great, let's walk away from it. Um, I don't think that's the case, but you know, if that's what the data says, great, let's, let's turn my attention elsewhere. Let's, um, Let's see what's the next thing I can do to move the needle for our developers and kind of help them integrate better. You know, I think you know there's a certain philosophy behind it that the the point of it is to show patterns of integrations with HubSpot's API, right? It's like how do you do you do things once you have the what and the why? This answers the how, right? Perhaps that becomes a. a trivial question to answer in the future and this isn't needed. I'm not sure I see that happening anytime soon. But, you know, this is the, you know, we can evolve it to something else, kill it, do something different. But yeah, for the, I'll say the short to medium term here, really focused on helping developers understand the hows.
I think the, I think the I don't know answer is a very It's brilliant in the way of— because let me put this way, how many times have— I'm sure all of us can attest to—
Actually, don't put it that way. Just keep calling me brilliant. Could you put it that way again? Yeah.
No, I mean, we're going to clip this. I'll clip this for you too, because I mean, this holds weight. This holds weight. I mean, yeah. But no, but I'm sure we've all had that example where whether it's been a list of or a library of either best practices or examples where It's just been this kind of where you look at it and you don't feel like it was made. I mean, and granted, it's not made for you as the individual when you're looking at like code examples or you're looking at a library of best practices. They're not specifically made for you because your use case might be very, very niche. But I think the fact that you've said, well, we'll let the— you know how they say like, we'll let the market decide? I think that approach, I think A lot of people don't take that approach. I think they say, here's the things I think are important to people without actually asking them if it's important to them. And then they kind of go off and they— I guess bloat may not be the right word, but you end up with this kind of like repository of just a bunch of useless things that nobody interacts with, right? So I think like, I think the approach you're taking is brilliant in the way that it's actually empathetic and it's listening to people as opposed to telling people— What, you know, I, no one wants to be told what they should do or think. Like, so why would you give them a bunch of examples that you don't know they even want? Right.
So, yeah, I was thinking about this too. I'm trying to translate it a little bit into, uh, someone running a small business because I feel like, Zach, you kind of have a luxury of a lot, you know, not having like, it's going to do what it does. And if we have to sunset it, we sunset it. Whereas someone from a small business can't Quite take that approach, but I don't disagree that you need to be able to disconnect yourself from a failing. You know, you need to be able to move on. Could you try to explain to the person who doesn't have the luxury of like, you know, a large corporation of HubSpot, something like that behind it, to be able to like, how do you shut something down? How do you listen to, you know, all the voices and make that You know, five-year decision because you need to have that kind of business plan.
Great question. I'm not sure I'm really qualified to answer that. My entire professional career has been in in corporations, right? I I work you know right out of college. I I used HubSpot as a customer. That that's how I found the HubSpot ecosystem. It was at a at my my second inbound that my account manager who is a colleague of ours actually now, by Caitlin Seagrass. You know, probably like the 3rd Sam Adams that night. She was like, hey, sounds like you don't really like working for Oracle. They had bought the business I was working for. And, you know, why don't you come over to HubSpot? It's like, okay. So I've been in that, you know, in this kind of ecosystem for a long time and been under the umbrella of a corporation to provide me some level of of flexibility here. Um, now not to say that I didn't get personally invested, especially when I was, you know, kind of working around Bob early days. Like, I, I, I'm somewhat ashamed to admit it, but I, I broke a lot of Jabra headsets, um, because I would get so frustrated that these prospects couldn't see the value of us. Like, I'm telling you right here, this is amazing. Why are you bringing about these objections? Like, ah, just And again, it's like I was so personally invested in it, I couldn't step back and really listen to what the other person was telling me. So over time, as I matured as a person, as Healthspan matured as a business, as I started to, you know, kind of listen to more voices around us, one of which relates to this, and I have to give credit to Maggie Georgieva. a longtime product manager here at HubSpot. She gave a talk in the early, early days of HubSpot that said, okay, hey, don't make your product your baby, right? Because your baby might need a new face. And that can be a deeply unsettling thing. I think we're all parents here in this particular group. You know, I do have children, though. I'm invested there. Like, I'm not making any fundamental changes. I'm not walking away from this. Like, yeah, I am full-on invested there. Don't draw that analogy to a piece of software, to, you know, a business strategy, right? A business strategy is useful, and a business is as good as what it allows you to do. you, right? So if it allows you to make more money, it allows you to have more work-life flexibility, like that's the important part. The how you do it is likely going to change, right?
Yep.
And then we can get into the if, like sometimes there are just walkaway points where you have to recognize that this is a net negative for me, regardless of how much hours I've sunk into it, right? I was an econ minor. I loved the idea of like sunk cost fallacies. And kind of all those different things. And it's true, right? We do it all the time. Like, we are not rational beings, which is, you know, why economists have never been able to predict anything because it's all fundamentally based off of like the idea that people are rational. Like, no, they're not. Have you talked to people? So yeah, take that, Gregory Mankiw. There's a deep cut for everybody listening at home. Harvard professor wrote kind of the first intro to a very popular intro to CityCon book. Anyways, so the— I got a little off track there. The kind of the core of this is like, as you're like a small business owner, like, first of all, go back to what I said at first. I'm not really that qualified to talk about this particular scenario.
You're not, doctor.
But I do think we can take some lessons and generalize them of saying like, Okay, let me make sure what I'm attaching my identity to and my sense of self to are the things— are like the, the things I'm trying to achieve, not the ways I'm doing them. The ways are going to change. Your values and what you need out of it, those are a little bit less mutable. So like, that's where you want to kind of tie yourself to. Uh, there, totally agree with that.
That's probably a common mistake a lot of people make is like, this is like when they create something, it's like, this is— I, I can't let this go. I like look at it all. Like, you think about that, like, even when you, um, like, when you go to sell a home or something too, it's like, well, I put all this work into it. This is my baby. I can't, I can't, I can't part with this. You know, when, you know, like, it's that kind of mentality where it's like, uh, yeah, it's hard to let go of that effort, right? Because you kind of equate it to, um, yeah, you equate it to this kind of— there's this value that's like, obviously, like, in, in most cases, more valuable than money. But it's, it's one of those things where it's just like, it's so hard to say, like, oh yeah, okay, well, I'll just go. Like, like, I know AJ is able to like do that a lot more easier than I am, where he's like, I'm building this new thing. I was like, what about the thing you built before? Oh yeah, that's not— I'm not doing it. And I'm just like, I—
It takes a long time to be able to do that though, to just walk away. Like, to Zach's point, like, it's a, it's a skill you have to really build on because as humans, we are emotionally connected to stuff sometimes. And there's been plenty of things that I've built where I'm like, this sucks, but it's not working.
Bye.
And you know, you waste a day or two, but yeah.
And there are absolutely times where you very intentionally do want to pour yourself into something, right?
Right.
Parenting.
Right.
Yes, absolutely. Like, and actually maybe even your home, right? Like, you're looking at over like a 20, 30-year horizon generally. Um, so like, it's okay to invest that and like build that emotional connection with the thing, right? With the thing that might change, right? You know, we only have so many certainties, like, you know, life, death, and taxes. Um, everything else is, is, you know, up in the air. So you, you have to take some risks. You can put yourself out there. And look, there are benefits of pouring yourself into something, right? You can achieve such heights with really focused, um, ambition and pour— and like personal investment in a product or a business. I think so many founders benefit from this. But there will come a time where you have to kind of protect yourself as a person to say like, hey, I got to step back and intentionally invest less of yourself. Not necessarily less of your time or your focus, but like your perception of your self-worth is really kind of where you need to kind of separate that out. Passion is great. I think not the right use of the term, but like where this is enmeshment with like a business entity and like merging those identities together—that can is where things get really harmful. And I'll tell you, for a while, that was me and HubSpot. Like I would tell you, like you cut me open, I bleed orange. You know, I've. I 1,000% believed in what we did. I still believe in what we do, but like, it was part of my identity, right?
Yeah.
And when that got like threatened, I couldn't handle it. It was way too difficult for me. So I had to kind of do a bunch of soul searching and kind of figure that out. And I think, you know, now I can look at things with a much more balanced perspective and say, hey, I believe in what we're doing. I'm going to invest my time and energy into helping us achieve this mission of, you know, helping millions of organizations grow better. I absolutely think that's the right thing to do. But I also have a separate view of myself. I am not just a HubSpot employee, right? And that's kind of the thing that fatherhood kind of forced that on me.
Having kids will do that, right?
Because basically in my 20s, I essentially was a hump bomb boy. You know, I woke up, I worked, I came home, slept, and I, you know, ate, right? Um, that was it. Um, not, not the healthiest thing, but, um, it was fun.
Um, no, I, I want to thank you, Zach, because I mean, this has been, uh, first of all, I think people who don't or haven't seen The Center yet should Obviously take a look at that. And, and we're gonna have a, a link in the actual, um, the show notes and everything. So, but for those of you watching right now who are actually watching it right now, you'll be able to, uh, go here and you should be able to then, um, take a look at everything. But yeah, no, I just wanted to thank you because like, I like your take on things, right? And I like your approach. That's, um, it's not forceful, right? Like, like I was saying before, you're You're not telling people, well, this is what you should look at because this is what I think you should look at. There's that, again, there's that piece of empathy there and that ability to ask for feedback, right? Or that ability to ask, what is it that you are trying to solve instead of telling people what they should try to solve? That I think is, it gets lost sometimes. I don't think everybody's able to do that. Like I said, I've been through tons of where I'm looking at something, I'm like, I just need an example of this. I don't need all of these other things. And I, I just, I was surprised at how many times I don't find it, or I don't find it structured the way that you've started structuring code. So, um, again, it's just a huge thank you for that because—
All right. And, and so you're welcome. Um, and, and I'll add, well, kind of one more note on there. Um, as you're checking it out, if you find somewhere where something doesn't make sense or it's not working for you, you Open up an issue, leave a comment. I think we have links to be able to provide feedback kind of right on the home landing page there. I want, in fact, need to hear from you. I want to make this as useful as it can. So while I'm here talking about it, let me—
Yeah.
Go ahead and make the explicit ask here to say, While you're looking at it, let me know how it could be more useful, how it could help you add more value to kind of the customers that you're building for, you know, and we'll do what we can to make it happen.
I love it. Thank you. Yeah, thank you so much for being on. Is there anything— I mean, if you want to be found, I always ask because some people like— is there anywhere else people can find you, or is there anything else that you wanted to plug before we sign off?
I'll be appearing in movies nationwide. No, I feel like at the end of a Hot Ones episode there. I actually don't have much of a social presence there. So, you know, feel free to reach out to me here, you know, kind of via email or on Slack if we're connected there. Otherwise, Yeah, I actually am not on pretty much any social media at the moment. So yeah, it's been a real pleasure speaking with you all. I hope people find this valuable. If they don't, let me know and I'll iterate and try again. I'm all about experimentation and finding out what works and keeping that kind of scientific mindset. Um, you know, there. So, um, yeah, again, thanks for the opportunity to, uh, to talk about the resource and kind of share my thoughts here. Um, yeah, it's been a pleasure.
No problem. Scramble some eggs.
No, thank you for taking the time to come on. We really do appreciate it. And again, check this out. The link will be in the description. And as of course, go to the @HubSpotDevelopers YouTube channel. You'll be able to watch this episode and many, many more in the future to come, I hope. And, uh, yeah, just have an eggcellent day.
What a great yolk to end on. Boom.
More from AJ

Ep. 32 - HubSpot Dev Site: An Origin Story with A.J. and Brooke | Devs:After Dark









