Growing Into a Leadership Role, and Pairing With Strangers | Ben Holmen, CTO at The Boutique Hub

Matt Stauffer:
All right, welcome back to the Business of Laravel podcast where I'm talking to business leaders who are working in and with Laravel. Today, my guest is Ben Holman, the CTO of the Boutique Hub. So Ben, hi. And can you tell us a little bit about who you are and what is the business that you're working with?

Ben Holmen:
Hey Matt, thanks for having me. I'm really excited to be here. So I am the CTO. I've been involved in the business. Even before I was a regular employee, I started as a consultant maybe seven or eight years ago at this point. And so of course as CTO, I'm overseeing all our infrastructure, our people, our code, all of that. And the business is a community of boutique owners and brands that work with them, marketers, lawyers, et cetera, working to make boutiques stronger.

So we're helping small businesses and in my role, I'm mostly building tools that help them that deliver training content, that provide resources. And as we'll get into here, also a large wholesale marketplace.

Matt Stauffer:
So if someone doesn't know what you mean when you say boutique, personally I know if you say a boutique store, I think it's a, I'm walking down some kind of quaint downtown hipster area and it says Marta's dresses or something like that. Is that kind of the general, how do you define a boutique?

Ben Holmen:
Yeah. So typically they're owned by, it's a small business. It's owned by one or two people. They might run it themselves. They might own 10 boutiques. So really we have a wide range of customers or members. And the stores, the diversity in the stores is pretty amazing. We have people who own like a hardware store, and then they also have a little bit of clothing in the back of the hardware store in some random place. And then we have people who have really high end things and really high end neighborhoods, really expensive downtowns. So we really have the gamut and it might be someone with like an online boutique out of their living room or it might be a huge business as well. So really a wide range. Yeah. Really individually owned. Yeah. Yeah. Independent retail is another name for it.

Matt Stauffer:
Okay, so it's all retail, but outside of that, okay, individually owned retail basically. Okay, got it, cool. So yeah, so the Boutique Hub is a suite of tools and resources to give basically, give things to boutique owners to help them do their jobs better. And you're the CTO of that providing technical tooling behind it. Okay.

Ben Holmen:
Exactly. So we run a whole stack. We have vendors who provide our training libraries and access to that kind of resource. We run a WordPress website for like our public front-end. And then we have a large Laravel application that's running a wholesale marketplace. So that's where Laravel enters into our business. We also use it to run some Shopify apps and process a whole ton of Shopify web hooks and move that product data around. So it's the tool we like to reach for whenever we have the choice to reach for.

Matt Stauffer:
Okay, so one of the things I really like in this podcast is that I get to ask questions of how has Laravel enabled people to do cool and unique things? This is not a technical podcast, so maybe we'll go into tech a little bit, but it's mainly about business. But I think that from a business perspective, there's things that you can do once you have programming ability that you couldn't do beforehand. Before you have programming ability, you're like, well, I can do whatever I know how to do in Google Sheets or in Zapier or whatever.

Ben Holmen:
Mm-hmm. Right. Right.

Matt Stauffer:
So there's things you're building. And one of the things that I, as a person who has not done a lot of e-commerce, I don't have a lot of experience with Shopify. So can you tell me, is it purely just your site has Shopify webhooks that every single time a certain thing happens, it pushes that data over to some endpoint, you control the endpoint, and then when you get that data in a Laravel app, you do whatever you want? Or are you officially registering Shopify plugins as well?

Ben Holmen:
Yeah. So what you described as part of it, and there's a lot more that you can do. They, of course, they have a gigantic ecosystem. They're the largest retail, like online retail provider. They do just, if you're, if you're ever feeling like you have a large business, you should look at their Black Friday, Cyber Monday stats, the amount, sorry to go technical here, but the amount of like bandwidth they, they process, the number of requests they process per second is just eye popping. It doesn't even seem real.

Matt Stauffer:
huh. No, yeah.

Ben Holmen:
So they're obviously like the giant players. If you're going to run an online boutique, you're probably going to use Shopify. So it makes sense for us to build apps that live in their ecosystem. They do have a full app store renewal or review process similar to like the Apple iOS store and the Google play store, which can be a little fraught to get through. It's a little stressful to build most of a thing and then just like hand it over to the reviewer and say, Hey, can I please play in your sandbox? I hope you say yes.

Matt Stauffer:
Here's my baby.

Ben Holmen:
So I've, I've, I've spent a lot of stressful days, agonizing over app, criticism, I guess, or what do they call it? Feedback. We'll call it feedback. But you can then access their APIs. You can show up in the retailer's dashboard. So when they log into Shopify, you are exposing parts of your application through that. And that's typically, well in the dashboard, that is a react app. and you pull in their component library so everything looks consistent in the Shopify dashboard. So we built a couple of React apps to live inside those dashboards. And then you can either hit their API directly and they have a great API. It's one of the best I've worked with. And you can also register webhooks, which is what I talked about. And so that's typically a good way to get current data. So if you're like worried about inventory levels, which is something we have to think about a lot. We don't want to outsell or oversell. Then we need to find out every single time a purchase happens in one of thousands of Shopify shops. So we ingest a lot of web hooks and processing those has been an adventure. Making sure I actually love it. I love the scaling problems. Like if something's not getting a lot of traffic, okay, fine.

Matt Stauffer:
Yeah. Right.

Ben Holmen:
But like having to think through how you're going to handle a large influx and you have to think about things like Black Friday, Cyber Monday. If you think about, if you have a few thousand shops that are doing a lot of sales on the same day at the same time, that means Shopify is pushing a lot of web hooks at you at the same time. So you have to be prepared for some really spiky traffic with that. And with Laravel that gets super easy. First off, I have built a Shopify app without Laravel doing vanilla PHP, handling it on my own.

And I built one with Laravel and I'll say I much prefer it with Laravel because of the queue handling in particular.

Matt Stauffer:
Okay, tell us more about that.

Ben Holmes:
So that makes it so easy to accept a web hook and then not worry about it right away. Just stick it in a queue to handle it when you're prepared for it.

Matt Stauffer:
That's so smart.

Ben Holmes:
So a more naive approach is you get the web hook. You say, okay, now I have to go hit my product database. I need to hit my product variant table. I need to hit my images table and do a whole bunch of updates live on that request.

And of course with queuing, you can just stick the payload into memory and Redis, or you can, in our case, we just do one insert into a MySQL table. And then we come back to that and we process them in order so that you're guaranteed to get them processed in the correct order.

Matt Stauffer:
That's so smart.

Ben Holmen:
And then it doesn't overwhelm our systems. Like our queue might back up, but that's fine. We don't worry about it being backed up a minute or two. And we can just return those nice green 200s to Shopify and keep them happy.

Matt Stauffer:
Right, and if Shopify doesn't get a 200 status response, it's gonna keep retrying that same thing until it gets a 200, right?

Ben Holmen:
Yeah, yeah, they will just keep hammering you away. And then if you're not, if your error rate's too high, then you start to get penalized. And I haven't had this happen, but there is a risk of like getting delisted for having a poor performing app. So making sure that you're playing by the rules and being a good citizen is important in their ecosystem.

Matt Stauffer:
Okay, so while I said this is not a super technical podcast, I think one of the things that I really like the idea of is there's things that programmers care about and then there's things that CTOs care about and there's some overlap between them. But one of the things that I hear CTOs often asking about are things about like the architecture, like what are you hosted on and what are the big architectural strategies you're doing to handle scale? Scale comes up all the time. So you just mentioned some really kind of scale -focused things.

Ben Holmen:
Mm-hmm.

Matt Stauffer:
Did you ever have to do automated load testing or do you feel like you were able to scale up at the point where you're like, we were able to build it in response to the actual requests that were coming through?

Ben Holmen:
Right. So I have done automated testing, not on the project we're talking about here, automated like load testing specifically. We built, we overbuilt it, I will say expecting more load. And so we did things like instead of starting with one server that had our database, our cache, our, our web server itself. I split those off right from the beginning.

Matt Stauffer:
Okay.

Ben Holmen:
Cause I, I, I had a good hunch of how big we would be. And so I wanted to at least reach a threshold with my infrastructure where my web servers were separated and they were behind the load balancer. I started with two web servers because it's a lot easier to go from two to three than it is to go from one to two.

Matt Stauffer:
Yeah. Yeah.

Ben Holmen:
And it's pretty cheap. Like the size of a web server, like a VPS at DigitalOcean, the size of that server is pretty cheap.

Matt Stauffer:
six bucks. Yeah.

Ben Holmen:
It's very cheap insurance. So I was a little over provisioned at the beginning. But that's cheap insurance basically, and it's future proofing without being too expensive. And then I scaled up my database as needed. And I also have it set up so that if I need to pull off our full text search, we use Meiliesearch. Or if I need to pull off Redis, I can easily pull those off into their own servers, but I didn't want to do it prematurely and I haven't needed to do that. I was able to keep that server at a reasonable size without having to scale that.

Matt Stauffer:
Yeah.

Ben Holmen:
But my philosophy was get it to a point where I could, if I need to, without a lot of pain and sit right there.

Matt Stauffer:
Love that.

Ben Holmes:
So we have pretty modest architecture for it. If I was really cost sensitive, I might try to squeeze more out of it, but I'm sitting in a nice green zone where I don't feel like I'm super over-provisioned, but I'm not worried about really bursty traffic causing a problem.

Matt Stauffer:
That's good. Yeah, and it's very interesting because one of the things you have to do with scenarios like this is figure out what is premature optimization and what is making a wise decision because there's something coming down the road. And I'm pretty often a pretty loud advocate for YAGNI. Like, you don't do all these architectural complexities before you're going to need them. But one of the things that I've been kind of building slowly is like a cue of what are the things that are, if you do need it later, actually is significantly harder to do than it is at the beginning.

Ben Holmen:
Right.

Matt Stauffer:
One of those things to do is a load balancer. It is significantly easier to set up a load balancer in front of two versus a single server. Another one of those is where your files go. Moving from a local storage to an S3

Ben Holmen:
Mm-hmm. Yes.

Matt Stauffer:
or whatever is a lot harder than moving from an S3 to a bigger S3, or not a bigger, but moving from one cloud to another cloud or something like that. Every time I've had to say, we're storing this on the local VPS to we're storing this in a cloud service, I've regretted my life decisions.

So I would add on there that that's one of those, if you think you're gonna hit any reasonable scale at all, consider leading with an S3 or DigitalOcean's version of S3, even though we all want to avoid premature optimizations.

Ben Holmen:
Right. Yep. Totally agree. I didn't even cover that file hosting, but that's just baked into the decision of do you go to two servers? You don't even think about it. Yeah. Yeah.

Matt Stauffer:
Because then you have to. Yeah, exactly.

Ben Holmen:
Where I thought you were going to take that question, we said, as a CTO, you think about this. I thought you were going to talk more about the business, if that makes sense, cause that's the other direction there. And you already mentioned YAGNI. I think part of my job as a CTO is to balance like the joy of programming for my team and making sure they're satisfied and writing high quality software with premature optimization in our code and like doing things because they're fun to do and balancing that against does the business need this? Is a user ever going to care? Is anyone outside of our team going to see any benefit from this?

Matt Stauffer:
Yeah.

Ben Holmen:
And I, I often get passionate pitches from my team, which I love about why we should do something. And the programmer part of me is like, yeah, I love this idea. Let's do it.

Matt Stauffer:
That's cool. Yeah, yeah, yeah.

Ben Holmen:
And then the other part of me just has to tamp it down a bit. Like this is not going to move the needle on anything and we need to move the needle. So let's, that was a fun discussion. We can jot down our notes for that and come back to it if it becomes an actual issue, but we're not going to worry about that yet.

Matt Stauffer:
Yeah, one of the things that we've really looked for in our programmers at Tighten is, do you have the ability to make decisions about...

that empathize with the needs of the client. And often we start with the needs of the client meaning the needs of their customer, right? Like as a customer, I want to come to this client website and experience this, but it's also the needs of the client as the business owner or whoever else that's like, I have this much money to do this much and in order to do this, I need to make this, in order to make this, I need to do this, whatever. Those are constraints that like as a consultancy, we have to really be aware of those things.

But I imagine also as employees, like it's valuable to you to have an employee who can learn over time, you know, I'm not going to go work on this thing for a week because the business really needs to launch this by this conference in four days or four weeks or whatever. It's much more valuable for me to get these 10 things all done at a 80 % fidelity than this one thing done or this one mega nerdy thing done at 100 % fidelity. And now we're kind of like unable to launch. How are you able to develop?

Ben Holmen:
Right.

Matt Stauffer:
that sensitivity? Is it purely just through relationship with the business owners that you're like both in conversation with developers and with the business owners? Are there other experiences that you have that have led you to be able to kind of make those decisions better?

Ben Holmen:
Yeah. So the one you mentioned is the primary. I sit right in between decision-making in the company and I'm part of those decisions. And I sit and talk to a lot of team members across the whole company. I sometimes I feel like I sit in more meetings than anyone in our company because I'm looking for like opportunities to be useful, looking for problems to solve before their crises. And before someone has built the Zapier Google Sheets version of what we could do a lot more efficiently.

Matt Stauffer:
Yeah.

Ben Holmen:
But that, I think that's the primary part is just being aware of the business. And then a big part of my role is whittling that down, packaging it up and cascading those messages to my development team. So they understand here are the priorities of the business. Here are the problems we're facing. Does that, does the thing we're discussing line up with any of those problems or is it more theoretical? And, over time, and also I've got great developers on my, on my crew.

So they are sensitive to that. And when I talk about passionate pitches, I'm talking about like, and sometimes it's just an exercise for the joy of talking through a technical problem, like, we could do this. And there's a little bit of indulgence in that, like in our weekly meetings, like, yeah, let's talk about it. But I think we all know, like, it's probably not worth it. Like, we're not going to rebuild that WordPress site in Laravel, even though it would make our lives a lot easier. It's there's, it's not going to make a difference. So. Yes, we're gonna have this conversation. We're gonna hear each other out and then we're gonna probably do the thing that makes sense for the business.

Matt Stauffer:
Yeah, and it's interesting because there's a balance in both directions. We're talking about the balance to make sure that programmers don't go off on our, I want to really optimize for the new Shiny. But I've also worked with a lot of companies where technical debt is considered, like, the developers just want to play around and update their blah, blah, blah instead of building new features. And in those cases, I'm like, well, you need to be pushed back against because you need someone who understands that if your tech is accumulating debt.

Ben Holmen:
Mm-hmm.

Matt Stauffer:
Eventually, it's going to break, fall down, get you guys in the news for bad reason or whatever else. So I feel like you are probably pushing back in either direction. Yeah.

Ben Holmen:
Yeah, I do. Yeah, for sure. I spend a lot of time talking about like, what are the systems in your house? Do they need maintenance? Is it like really fun and sexy to replace your furnace? No, but you have to do it. You have to maintain things. And so some of the work we do is it feels boring from the outside. It doesn't feel like it makes a difference, but it's just maintenance. It has to be done in software projects. So I spend a bit, I,like that's a ongoing theme in conversations as we're setting like goals for the company as a whole and what my team can contribute to that. I'm often including some kind of maintenance work and that might not even be tech debt. That's often just like bug fixing and user feedback and dealing with the minutia of maintaining a large software project. But you have to sell the value of that. You have to be able to explain why we should invest.

Matt Stauffer:
Yeah.

Ben Holmen:
time in that instead of building new things all the time.

Matt Stauffer:
Yeah, definitely. Because the business for good and for bad wants to ship features.

Ben Holmen:
Right.

Matt Stauffer:
They want to ship things that make users excited, that make more users want to do it. That's the thing that doesn't always click the hallway through the developer, is that in the end it's users who want to see something different. Therefore, owners or whatever, managers want to say, I spend money on this app and this app does more of these exciting things. And on the other hand, you've got the developer saying, yeah, we want to make sure that this thing is, you know, like it's not always just new, it's also updating the old and kind of you sit in the middle space there as a tech lead.

One of the things I wanted to ask you that is kind of relevant to what you're just talking about there is you talked about having this great team that you're really proud of and stuff like that. And people often ask me about the experience of hiring Laravel developers. And they're like,

Ben Holmen:
Mm-hmm.

Matt Stauffer:
Well, I see JavaScript developers out the wazoo, because every single boot camp is turning out a React programmer who has a little bit of express backend experience. And I make the case that I think there's more Laravel developers than people think, but I just want to ask you, what has your experience been in finding and hiring Laravel developers?

Ben Holmen:
So I felt like I had a pretty positive experience.

Matt Stauffer:
Good.

Ben Holmen:
I've done a couple of rounds of Laravel specific hiring and it, I mean, first off using Larajobs is super easy. I can't recommend that enough. Way to go Ian and the Userscape crew.

Matt Stauffer:
Right. Yep.

Ben Holmen:
So I mean, that's a giant filter right there. Like if you are a serious Laravel developer, you probably know about Larajobs. And so if you're applying to me through Larajobs, we already have a leg up. So. That's the first great filter to put them through. And then I've actually found, maybe we'll touch on this a bit more. I think Laravel has a culture of sticking to conventions more than other programming languages or frameworks that is really useful on an ongoing basis. But it's also useful when you're interviewing developers, because it gives you a bit of a rubric of like, how well do they understand the framework? Are they solving problems?

Matt Stauffer:
Hmm.

Ben Holmen:
Using the framework or in an idiomatic way, or are they just kind of making it up on their own and like they're saying they're a Laravel developer, but they don't, they haven't had a lot of experience in the framework specifically. And of course we're trying to leverage that as much as we can. So I want developers who are not reinventing anything, but they're relying on what's already there, code that's already proven and written for us. And so that's been a useful filter as well, as I'm looking at code samples.

Matt Stauffer:
Yeah.

Ben Holmen:
or code challenges that I typically do in a interview process, it makes it easier to analyze their results and assess where they're at.

Matt Stauffer:
Yeah.

Ben Holmen:
So I personally have not struggled to find qualified Laravel developers. I'm not worried about it. I think there are more and more and more Laravel developers coming up. So I think we're on the right trajectory for that.

Matt Stauffer:
Yeah, well going for the right direction, I just had a conversation with a client who was trying to decide kind of the future of the front-end of their app and they're trying to decide whether they use LiveWire so that they can have PHP programmers writing the front-ends or if they want to use something like Vue or React so they can have like a front-end team and a back-end team. Can you talk a little bit about the choices you made in terms of what your front-end looks like and how that impacts the shape of your team and who you're hiring and everything?
Ss
Ben Holmen:
Right, that's a good question. So I approached this like we all do with some biases, of course,

Matt Stauffer:
Of course.

Ben Holmen:
and my bias was more toward, now I guess we have to call it server-side rendered. I would just call it like the way the web was, like return some HTML and an HTTP response. And so that was kind of my default. I had a conversation with Keith from Tighten a long time ago when I was just starting out on this Laravel marketplace.

And we'd specifically talked about LiveWire. I think that was like, I don't know if it was LiveWire 2 at that point. It was, it was a little baby project at that point. Yeah. And basically my question to him was like, is this ready for production? Like this looks really cool, but should I depend on this thing or is it gonna like, like so many cool things that developers build, is it going to be maintained for like six months and then slowly die? And boy, am I thankful that it has not gone that way because we did choose it.

Matt Stauffer:
early days, yeah.

Ben Holmen:
We built out using the tall stacks Hotelwind Alpine LiveWire in Laravel. And it's been really productive for our crew. What that's meant is I hired into that. So I wasn't looking for people to write an SPA for me. I was looking for people who could write Blade mostly, like returning HTML from the server and then specifically a willingness to learn LiveWire or at least some understanding of it.

Matt Stauffer:
Yeah.

Ben Holmen:
So I hired into my stack of choice. Like so I think that's a pretty universal experience. But it was the fastest way for me to get started and start shipping. And so that's why I ultimately chose it. We needed to get our prototype out to customers. We needed to ship as soon as we could, like so many people. And I didn't want to be a bottleneck with a larger team with people focusing on the front-end and then inertia or an API in between those things. I wanted to have one team that could ship basically just straight out of the monolith like that. And I know there are other techniques for doing that. This is just my personal perspective. I'm not going to argue with, you could do it this way. Right? Yeah. Yeah.

Matt Stauffer:
See, this is the only way or anything. Yeah.

Ben Holmen:
But it was the best fit for me and my background and my speed of development and my way of finding the right developers. It made it easier for me, given my background, to go with that.

Matt Stauffer:
Yeah, and this might be too much to ask you, but one of the things that I know that some folks might end up thinking is, okay, so HTML over the wire using something like Livewire or just literally using Blade and not even using Livewire is an easy way to get started, but then...

Ben Holmen:
Mm-hmm.

Matt Stauffer:
you know, you can't do X, X, you know, X, Y, and Z. And there's been a whole bunch of conversations around the internet lately about, you know, not, not, you have not, but they're not been criticizing LiveWire,

Ben Holmen:
Really?

Matt Stauffer:
They've been criticizing HotWire, because it's people in, for those not familiar, HotWire is a very, it's very similar to LiveWire in that it is a place where you're choosing to use primarily back-end technologies to serve your interactive front end versus having an entirely separate JavaScript front-end.

And some JavaScript folks have been saying, there's no way you can be as performant. There's no way your modals are gonna take really long to pop up because they have to go to the backend to get them or whatever. So I just wanna ask, practically, have you found yourself at any point during this process saying, if only I had written this as a JavaScript single page application, full on Cue or full on React, there's something I could do that I'm not able to do today?

Ben Holmen:
I haven't personally found it. Again, out of my own biases, I have not regretted the choice I made.

Matt Stauffer:
Okay. Right. Yeah. Okay.

Ben Holmen:
First off, there are techniques around that. Like if you need to show a modal or whatever, there are ways to do it. There's still JavaScript on the front end.

Matt Stauffer:
and still use JavaScript, yeah. Yeah.

Ben Holmen:
Like we're not afraid of that. And we just do not experience like the app is too slow or this isn't loading or it just doesn't happen. So it's just been really reliable for us. And again, not to say that's the only way, I'm just saying it's a valid way and it's worked out for us.

Matt Stauffer:
Yeah, yeah. So in terms of the technical challenges you've been experiencing, one of the things you've mentioned a couple times is scale, but I do want to ask, like over the last year or maybe two years, what has been your most interesting technical challenge that you had to overcome, whether it is a nitty gritty coding problem or maybe a higher level architectural thing?

Ben Holmen:
Yeah, we've had some interesting, I'll call it a few. These are just more interesting, not necessarily like challenging, but they're kind of mixed together. So I mentioned scaling our Shopify webhooks, like we built out our first prototype and I was concerned about it not processing webhooks in the right order. So theoretically, if you fail a job and then another job runs after that, that failed job actually drops to the bottom of the queue.

Matt Stauffer:
Right.

Ben Holmen:
And so you could process those webhooks out of order. So we spent some time refactoring that, and that was interesting to figure out like, how can we really make this performant and make sure it's being processed in exactly the right way. So that was an interesting challenge. I won't belabor the webhook thing since we've already talked about it a bit. We also have a pretty large media library. I think it's maybe eight terabytes at this point. So we ingest a lot of product data. And there are typically maybe six to 12 images per product. We have like 220,000 products live right now. So it's a lot of images. And then we're using Spotsy's media library package to process like cropping and resizing. And we generate multiple different things there. And that generally has been pretty solid for us.

Matt Stauffer:
Okay.

Ben Holmen:
I would recommend it. But with scale, like things just break. And so we've had some interesting experiences there. And it's interesting because I can literally look at my AWS bill and say that command that runs every day costs $11 because like the...

Matt Stauffer:
Just watch.

Ben Holmen:
even the egress from AWS is it's not nothing. It's not a huge bill, but of course, anytime your command costs like American dollars, you, you tend to know it's like,

Matt Stauffer:
You really notice it. Yeah.

Ben Holmen:
I wonder if we could maybe save that a little bit. So we had one job that apparently was just pulling down a lot of files every single day. It was attempting to regenerate any missing thumbnails basically, but it wasn't working quite as expected. So we had to troubleshoot around that and change our approach. We found a way that actually made it through the list. So it didn't keep retrying the same batch every single day.

Matt Stauffer:
Yep.

Ben Holmes:
And I think it maybe reduced our S3 bill by like 30% just that one fix. So it saved, I think maybe a hundred, $200 a month. So for me, that felt great to like reduce some costs. I don't know if the ROA on the time was worth it. Over time, it certainly would add up, but it did feel nice to deal with something. It just felt broken, right? Whenever you're, whenever you're paying Jeff Bezos way too much money to move images around, like let's crack that problem quick.

Matt Stauffer:
Let's fix that. I don't like that. Yep, I'd rather pay my programmers than Jeff Bezos.

Ben Holmen:
Yeah, for sure. So we've had technical challenges. Honestly, at this point, the project's been going for a few years. So a lot of the, like, uncharted waters are behind us, like figuring out payment or communicating with different APIs and different vendors. That's all in our rearview mirror for the most part. So now we're in a more iterative stage of like, how do we reach more customers? What are we missing? How do we grow this thing, listening to feedback and doing that. And so it's more of the, like the business end of it is really the thing that's the most challenging part. How do we refine this tool to get more out of it? How do we grow this part of our business? And that's something that I do include my development team in. They have a voice in that. And I think if you can do that, especially in a smaller company, I think that's beneficial. It, it helps set that perspective. We were talking about earlier where the development team needs to know what actually matters to the business.

Matt Stauffer:
Yeah. Yeah.

Ben Holmen:
So to be hearing customer feedback, to be hearing feedback from other team leads in the company, understanding what's important, that really helps them calibrate, like, how do I spend my time? Is this thing going to make a difference or not? And so that's been, I would say the challenges now are more, adoption and making sure that our users are getting what they need out of this. Not necessarily how do we get this thing off the ground, if that makes sense.

Matt Stauffer:
Yeah. So if those early days were the, you know, we're just trying to get this working, we're trying to launch, we're trying to get paying customers and stuff like that. And now you're a little bit more in the, okay, we took a breath and now we're trying to make it better and get more people to know about it. Are there any decisions that you made or wish you would have made in those early days that would have made your new phase easier? Because oftentimes people say the things you decide to do in order to just launch, launch, launch, you're going to have to pay for them later. Are there any things that you're like, if we only had ABC or if we only hadn't XYZ, this new phase that we're in now would have been significantly easier.

Ben Holmen:
There is one technical choice I could point to and that's how we handle payment on the platform. So to get in the weeds a little bit here, the marketplace functions kind of like Etsy where you have thousands of sellers, thousands of buyers, whatever millions, whatever their scale is. And so the sellers need to get paid somehow and you have to decide when someone puts their credit card in, where does that money go?

Matt Stauffer:
Right.

Ben Holmes:
And so this, this is a little different. You'll see, little variations on your credit card statement when you buy from different places. And sometimes you're like, huh, why didn't it say such and such? Why did it not say the website I bought from? And in our case, what's going on under the hood is we're using Stripe Connect, which is their method for associating accounts with one Stripe account. So we have a Stripe account and then when sellers register, they're connecting their Stripe account to it.

Matt Stauffer:
Yeah.

Ben Holmen:
And you have some choices to make there about how the money flows through those accounts. And, we chose the, I'm not going to call it easy mode. It's not easy. we chose to stay out of the money, if that makes sense. So you can choose to just make the transaction happen directly in that attached account and tack on your fee, which is how we make money on the platform. But you don't see a hundred percent of that money coming through and the thing on the statement is not your platform. It is the attached account, if that makes sense.

Matt Stauffer:
Yeah.

Ben Holmes:
So there are definitely some benefits to doing that. The biggest one is chargebacks. If the seller is not doing what they should be doing, that chargeback hits their Stripe account, which I would argue it should, and it doesn't affect your own reputation on your Stripe account. It's also really easy accounting.

We don't have to manage like how much do we owe this person? How do we do the payout, et cetera? And that felt like the right move at that point. I wouldn't say that was a mistake necessarily, just that there are trade-offs and it's had consequences from this point. The other way of doing it would be you pay our platform, we get a hundred percent of that money, and then we decide how do we pay out everything from there.

Matt Stauffer:
Yeah.

Ben Holmes:
And so where that has affected us is doing things like site-wide discounts.

It's we could do something like that if we controlled all the money and then we decided where it went after that. When the money's going to someone else's account, you have less opportunity there to run a discount or a sale on behalf of the platform. Another would be a reward system. So if you want people to be able to accumulate points and the...

Matt Stauffer:
spend them. Yeah.

Ben Holmen:
buy things with points, that's difficult, difficult to make happen. It turns out because you don't get to just do custom payout amounts. You only pay them what was on that invoice basically. So that's had some downstream effects. We haven't had to deal with payouts. We haven't had to deal with chargebacks. It was faster to get off the ground. So it definitely has had benefits, but that is one where like we come back to it every six months or so. And we're like, Hmm, if we'd done it the other way, we could be doing this thing a little easier right now.

Matt Stauffer:
If only. Interesting. Yeah. Okay. I'm going to kind of step away from the practical aspects of the boutique hub and talk a little bit about you and your career a little bit. So.

Can you tell us just a really quick, like what was your journey of going from, because not everybody who's gonna be in the podcast used to be a programmer. I mean, you still are, but like not everybody started from programmer. What was your journey to the position that you're in of business leadership and are there any resources or experiences or whatever that, you know, whether it's books or podcasts or conferences or relationships that you feel like have really helped you to get to the place that you are in today in your career?

Ben Holmen:
Yeah, so my journey was definitely coming out of programming. I worked as a programmer, like just the guy writing the code, not managing things for quite a period. And so I have all those years under my belt. I got into my current role six years ago and I took it knowing that it would be a leadership role. I started as the sole programmer, but this was a very rapidly growing business and we knew we'd have to build a staff.

And so pretty quickly we were hiring consultants and then hiring employees. So I took the role knowing I could get into leading people and managing people. And I already knew that was something I was interested in and had a, had a penchant for, which is why I was interested in it. I was looking for more responsibility. I love working with people and this was a good fit for it.

So obviously my boss saw the potential in me. She understood that I could do those things. And in some sense, it took a chance on me not having that background, which has paid off. And I've learned in the six years how to lead a development team, how to find people, how to motivate people, how to, run a team inside a business that's meeting the needs of the business. And I've really enjoyed that growth. It's been a pretty, like if you compare these six years to the six years preceding it where like I was just doing what I had been doing coding for a living for at that point, a decade or so. This has been a period of much greater growth, which I appreciate. I didn't want to feel like I was turning into a dinosaur as I aged in my developer career. I wanted to keep growing and growing as a leader is a, is a huge area to grow.

Matt Stauffer:
Yeah. Yeah.

Ben Holmen:
Some resources that have been helpful to me as a manager, I want to call it the book, Radical Candor. Are you familiar with that book?

Matt Stauffer:
I love that book. Yes, it's fantastic.

Ben Holmen:
Yeah. it's a good one. Just a couple of points out of that. Radical Candor is about communicating effectively, I would say, with your staff and building trust with them and knowing how to receive feedback from your team, how to solicit feedback and how to give feedback that is accurate and direct, but not like hurtful and is not toxic to your working relationship. So giving feedback about the work without the person feeling attacked. And that is tricky.

Matt Stauffer:
turns out.

Ben Holmen:
That is not easy to do. We put up a lot of our like self-worth and our value in the work we produce. And so knowing how to improve someone's work, how to give them constructive criticism, is, is a challenge. And so,that has been a big part of my growth as a, as a manager is knowing how to effectively lead my team and keep them motivated and satisfied and feeling supported in their position. So I love the process of building trust. I love running meetings. I love one-on-ones. We use pairing sessions pretty heavily, which I've found to be really effective as a leader.

When my team was at its largest, it was a little overwhelming. The number of people that I could pair with in a week, you've run out of bandwidth at some point. I got close, but I never totally exceeded that. But that has been a really natural time to build rapport. Like just getting to know people, like their personal life, what they're about, how they communicate, all those things. You just pick those up when you spend an hour and a half or two hours with someone. And I always approach those like, I'm not going to come in and we're going to immediately share the screen and dig into the code. Like there's a warmup there.

There's rapport, there's asking about your family, there's asking about whatever you know is going on in their life. And that just, that's been a really effective tool for building rapport. So often when we get to our one-on-ones, there's not really a lot to talk about because like we're pretty much on the same page for it. So that's kind of a unique situation to be in as a technical leader and also doing pairing. Like there's a good mechanism, like we're going to get together every week because we're going to pair.

Matt Stauffer:
So I covered. Yeah.

Ben Holmen:
But a big downstream side effect of that is I'm going to get to know you, you're going to get to know me. There's going to be a lot of trust. I'm going to just bring up like, here's what's happening in the business. Here's how that fits into that. So you just get a lot of dialogue that happens naturally out of that.

Matt Stauffer:
Yeah, I miss that. The first couple years of Tighten, I paired every day with our programmers. And then the next couple years of Tighten, I would pair pretty regularly, especially in somebody's first couple months. And these days, I got to pair with Marcy, who you know, recently, you know, a couple days ago, and she's like, it's been over a year since we paired.

Ben Holmen:
Been a minute, right?

Matt Stauffer:
And I was like, I hate, I mean, yes, but it was good. We had a great time. But I was like, it has been ages. So yeah. It's really nice to be able to do that. And one of the things that was important for us at Tighten is when I was not able to do it, I had to make sure that there's other folks available. And again, you know, Keith, Keith, you know, is available to pair with people, but there's really, especially with remote teams, there's something really important about building those stronger relationships other than just checking in. Did you do the work you're supposed to do? You know, okay, let's go. So.

Ben Holmen:
Yeah. That's a great point. Remote teams in particularly benefit from that. I'm not sure what pair programming would look like for me in an in-person team. My experience has all been remote, but it is so valuable as a, as a manager, like getting insight into how someone's doing, can be difficult just through Slack. Like looking for, you're looking for missing information, right?

Matt Stauffer:
Yeah, same.

Ben Holmen:
Like, I haven't heard from them. They didn't say anything today. I thought I would see them there. They weren't there. Like those are clues and those are. Like they're really easy to miss, honestly, as a manager. And so when you're regularly, when you're getting FaceTime with everyone every week, it's easy to pick up or it's easier to pick up on how are they doing? What's their motivation? How are they feeling about this project? How is their life going? How like, do they need support in some way? And then also just like the nuts and bolts of how are they progressing on their tasks? It's

Matt Stauffer:
Yeah. Yeah.

Ben Holmen:
a lot easier to see like, they haven't really started this. It seems like they're maybe over overwhelmed by it or don't know how to start.

Matt Stauffer:
Yeah.

Ben Holmen:
And I might miss that for a couple of days waiting for a Trello card to get updated. But in person, I'm like, okay, yeah, let's talk through this. And you just knock it out.

Matt Stauffer:
Yeah, yeah, I love that.

Ben Holmen:
So yeah, it's a really effective way to keep in touch with your remote team.

Matt Stauffer:
Nice. I want to ask you a whole bunch more about that, but as always, we're running short on time, and I still have two questions for you. But before we get to my two final questions, is there anything, any of these topics that you wish we had gotten a chance to cover before we start wrapping up?

Ben Holmen:
Hmm. No, I think I will have one more plug.

Matt Stauffer:
Yep, that's one of my two. no, no, piece of advice. No, go ahead. There you go.

Ben Holmes:
You had an item on the agenda and a piece of advice. Okay. Yeah. Piece of advice. So we already covered sticking to conventions and how they can be useful in hiring, but also just to maintaining your code. The other one is to use Shift. So Laravel Shift is a tool in our community. Make sure you're using that so you can stay current. It is so easy to keep.

Matt Stauffer:
Yes.

Ben Holmen:
your things current so you can use the latest conventions. So your team can take advantage of everything in the framework. Cause if you're still in like Laravel nine or something like that, you're out of date, a couple of versions, you don't get to use the newest stuff and it's harder to use even to get to the point where you can. So Laravel Shift is the best value in our community. I swear it's so cheap.

Matt Stauffer:
Yeah. And it ties together with conventions because not only is it good to use Laravel conventions for lots of other reasons, but you can use Shift to automate your updates better if you're following Laravel conventions. It's just like a whole happy little...

Ben Holmen:
Yeah. Yeah. Everything is easier. The closer you are, everything. Yeah. And I just use something this week or yesterday, that came out in Laravel last week. And it's just not a big deal. Like there was no pain and stained current because we've stayed current. And so I could just use something new and it worked. So I didn't have to write it. It was perfect.

Matt Stauffer:
Yep, 100%.

And the longer you let it go, the harder it is to get current, right? So if you just do the perpetual staying current, yeah, that's magical.

Ben Holmen:
Yeah, for sure.

Matt Stauffer:
Awesome, all right, so I got two questions for you. The first one is, what do you want to, well actually no, I'm trying to figure out what I wanna do first. Yeah, let's start with what do you wanna plug, just because it's so relevant to what you're just talking about. So if there's one thing you wanna plug, what you got?

Ben Holmen:
Yeah, I've got something to plug. So I've been running an experiment and the experiment is pairing with strangers. So I've talked maybe more about pairing than anything in this 40 minutes. But I had a random Twitter crossing with Joe Tannenbaum and he mentioned he hadn't paired before and I pair regularly. It's cool. I like it. I thought, you know what? I could help him like go from zero to one. on this, which is the hardest part, right?

Matt Stauffer:
Yeah.

Ben Holmen:
And so I just sent him a DM, said, Hey, do you want to pair? I'd be happy to do it. And we did. And we've become friends because of that. It was a huge success. I was curious about what it'd be like to pair outside of my code base. If that makes sense.

Matt Stauffer:
Yeah.

Ben Holmen:
I have a ton of experience pairing with the same people I work with all the time, but jumping into someone else's code and someone you don't know felt like a risk and it's totally paid up. So based on that one experience, we started a scheme, Joe has named it the pairamid scheme. And I've been pairing with two people each week ever since. And I think I'm up to close to 20 people I've paired with at this point. And it's been an absolute pleasure. So what I want to plug is you can find me on Twitter and get on my calendar. If you want to pair with me, I will literally pair with anyone. I still, I'm still working through the initial queue of people. So you might have to wait a few weeks. But mostly I want other people.

Ben Holmen:
pairing with other people. So my ask every time I finish pairing with someone is, will you go do this with someone else? And they're doing it. It's beautiful. I feel like I sent my kids off to college when I see like someone on Twitter mentioned, I paired with so-and-so, it was great. They have this interesting thing going on or I've never seen that. And you get this cross pollination of people and personalities and culture and code bases. Like I get to parachute into a code base that's unfamiliar to me.

Some of them in Laravel, some of them outside of Laravel completely. And so I get to get more personal exposure to what does a Remix app look like? Never worked in one myself, but I got to get into a real production one. So now I have a better sense of what is that all about? And I've, I think I've convinced several people that Livewire is the way. But yeah, that's been a really positive thing.

Matt Stauffer:
Love it. Fantastic.

Ben Holmen:
And I want to plug that you get yourself out there and pair with a stranger and see how it goes. I think you'll be pleasantly surprised at the outcome.

Matt Stauffer:
Brilliant. Yeah, and while I think you should pair with anybody, I personally have had a delightful time pairing with Ben Holmen himself. So even if you're gonna go pair with other people, get on this man's calendar.

Ben Holmen:
Thank you.

I appreciate the plug, Matt. Pairing with Matt is like riding lightning, I'll say that. This man moves fast.

Matt Stauffer:
I'm embarrassed. I love it. Okay, my last question for you before we wrap for the day and by the way everybody all this is gonna be in the show notes so just check those out for links to Ben's website, Twitter, the pairamid scheme blog and everything like that. Okay, so the last thing is and I wanted to ask everybody this and I think I forgot but if you know, I know you don't own the business but let's say you owned a portion of the business and the business sold and your take home was hundred million dollars today. What do you do tomorrow?

Ben Holmen:
I would go for a very long walk. Like...

Matt Stauffer:
Ha ha! Yeah.

Ben Holmen:
I would disappear into the woods for a minute, for sure. Yeah, that's my speed. I might hike the Continental Divide Trail. That would seriously be something I would do.

Matt Stauffer:
Yeah. Yeah. Yeah. Okay.

Ben Holmen:
I've always wanted to do a long distance, like Appalachian Trail's like, what, 2,500 miles long, something like that. You're actually probably not too far from the Appalachian Trail.

Matt Stauffer:
No, I don't know exactly where I am, but I'm pretty sure the base is pretty somewhere near Atlanta.

Ben Holmen:
You're pretty close. Yeah, yeah. But, you know, fitting that into my life has proved to be a challenge, like taking three months out of my life at any point.

Matt Stauffer:
Yeah.

Ben Holmen:
But that might be the time to do it.

Matt Stauffer:
Okay, I like it. Not a single person, no, I don't think so. I don't think a single person has said they're going to Disney World yet, which is perfectly fine, but it's so funny because that's, everyone is kind of that given thing. And I'm like, I think it's something about the scale. Like if you've got $20,000, $30,000 Disney World might be like, man, you know, Disney is so freaking expensive these days. I can finally afford a trip to Disney. But when you say a hundred million dollars, you're like, I can go to Disney every weekend if I want. What's my bigger thing? So yeah, that's fun.

Ben Holmen:
Right. man, for 20K I go for a short walk in the woods. That'd be, I... Why not? Yeah.

Matt Stauffer:
Right? 20k? I'd buy a nice bottle of wine, you know, go take a walk, go to a park. Nice.

Ben Holmen:
Relax for a second.

Matt Stauffer:
Right? Truly. Cool. Well, of course, as always, I can talk to you for hours longer, but we have hit that marker that says we're supposed to wrap up. So I know I've asked you this, but one more time, is there anything else that any of these topics you want to cover? Or do you feel like we got through everything pretty well?

Ben Holmen:
We got it all, Matt. Well done.

Matt Stauffer:
I love it. Ben Holmen, you're a delight of human being. I'm going to say this to the whole internet because I've told you this before, but I delight every single time I see your name coming up, see people learning that you're a person to learn from, to pair with, to whatever else, because I think you're one of those voices that I'm like, this person having more influence in the world makes the world a better place. So I really appreciate you being that kind of person, being that kind of a boss, being that kind of a community member, and also spending some time with me on this podcast so we can share that delight even more.

Ben Holmen:
Thanks Matt.

For sure, I feel exactly the same. Thank you so much for saying that.

Matt Stauffer:
Thanks, my friend. And for the rest of you, thanks so much for hanging out with us this week, and we will see you next time.

Creators and Guests

Matt Stauffer
Host
Matt Stauffer
CEO @tightenco: @laravelphp and more w/some of the best devs alive.Host @LaravelPodcast. "Worst twerker ever, best Dad ever" –My daughter💍 @ImaniVJones
Ben Holmen
Guest
Ben Holmen
Big tall anti-entropy machine. he/himGrowing the pair-amid scheme 🔺1/3 of the hit podcast @cheese_weather 🧀🌩️ w/ @dhicking + @zuzana_kunckova
Growing Into a Leadership Role, and Pairing With Strangers | Ben Holmen, CTO at The Boutique Hub
Broadcast by