POPULARITY
Born and raised in the Midwest to parents originally from Egypt, sisters Alia and Radwa Elkaffas created their Food Dolls platform to share exciting, fast, healthy meals. Born and raised in the Twin Cities to parents originally from Egypt, their recipes from “Pretty Delicious” are flavor-packed, Mediterranean-inspired, and plated with their signature style.Recently, we had a chance to catch up with the Food Dolls sisters on the eve of their cookbook launch for “Pretty Delicious” (pre-order the book here now) when we recorded a “Taste Buds With Stephanie” (episode drops on Fox 9 2/22/2025 at 8:30 am. ) at Radwa's gorgeous home. The sisters were as delightful and warm as ever, and we loved the recipes. “10 out of 10.” We made 3 recipes from the book, “Pretty Delicious”. I also riffed on their Marinated Tomatoes and Feta Dip and made it my own with all the same ingredients but as a baked pasta dish in homage to their talents.Cheesy Tomato and Feta Baked with Pasta and HerbsBy Stephanie Hansen Ingredients* 2 cups cherry tomatoes about 1 pint* 1/4 cup olive oil* 2 teaspoons salt* 1 teaspoon pepper* 8 oz. full-fat cream cheese at room temperature* 8 oz. feta cheese at room temperature* juice of half a lemon* 1 Tablespoon honey* 1/4 cup fresh parsley* 1/4 cup fresh basil* 1/4 cup fresh mint* 8 oz penne pastaInstructionsPreheat the oven to 400°F.Add the tomatoes, olive oil, salt, pepper, lemon and honey to a 9 x 13 baking dish.Nestle the cream cheese and feta cheese in the center of the baking dish amongst the tomatoesBake for 22-25 minutesMeanwhile, boil the pasta until el denteRemove from the oven and add the sour cream and stir the mixture, breaking it up combining the cheese and the tomatoes with the pasta making a saucetop with the fresh basil, parsley and mint, and serve hotEPISODE TRANSCRIPT:Stephanie:Hello, everybody, and welcome to Dishing with Stephanie's dish, the podcast where we talk to people equally obsessed in the food spaces as we are. And today, I'm with the Food Dolls. I'm with Radwa and Alia Elkaffas, and we had an opportunity to record a taste buds episode with them that will air at the end of February. I think it's gonna be February 22nd right on the eve of your book being available at stores.Alia Elkaffas:It well, we go live on the 25th.Stephanie:Okay. So you can preorder, though, your book Pretty Delicious right now. And if we talk about cookbooks in particular, the preorder is like it's crazy because what people don't know is all those preorders that you say you want this book, they count towards day 1 sales. And for people like Food Dolls who have such a massive following, it could be the day that launches them potentially to the top of the New York Times, cookbook list. So preorders for cookbook authors are super important. So we want you to get your books when they come out live, but we also want you to preorder because all of that stacked up on that first day counts to get them we're trying to get them on the New York Times bestseller list with their book. Would you like that, girls?Radwa Elkaffas:That would be just a dream.Stephanie:I know. It would. When when we spent time together in your home and watching you guys make your magic, When I left, one of the things that I asked, I'm like, so, you know, what are your intentions? And you were like, we wanna get our book on the New York Times bestseller list. And I think I really think you can do it because you guys have such a huge following. The book is so great. It's pretty delicious. Can we just back up? Like, you guys said you've been doing this pretty much since pre pandemic, but I feel like, you know, you've amassed such a huge following. Like, how did it get started?Radwa Elkaffas:Well, first of all, thank you so much for having me on, and it was so fun cooking with you last week. I well, we definitely started around 9 years ago now, which is so crazy to think that it's been that long. I think when we first started, we didn't really have, like, the best direction of what exactly Sure.Stephanie:No one did.Radwa Elkaffas:And we were trying to figure out social media. Both of our backgrounds were not chefs. We have no we have no photography background, no videography background. We had nothing, but we just knew that we love to cook, and we wanted to share with the world how easy and delicious you can make recipes. And I think that's been it since day 1. Our shift kind of changed a few years later on really kind of honing in on, like, our culture and our background and what we grew up eating, and people loved it. People loved it, and they love our, like, sister vibe.Stephanie:Yeah. You 2 are real life sisters, and are you 4 years apart?Alia Elkaffas:Yes. That's right.Stephanie:And, your background is your parents are from Egypt. Right. So you're you're leaning into that sort of cultural vibe. And what maybe a lot of people don't know, and I know a tiny, tiny bit, but, that Egypt is a very modern place all told. Like, can you just give us a little bit of, why it's a touchstone for you to still be speaking about this food that you guys have lived here most of your lives, but you still feel like this is such an influence for you?Alia Elkaffas:So our parents were they immigrated here in the early eighties. And so we were both born and raised here, but they really tried very hard to keep our Egyptian background alive. So whether it was with food, with, cultures, traditions. So, basically, we're very we're very Egyptian and Midwestern at the same time. So you even see a lot of our recipes. We do fusions between Egyptian and Mediterranean, Middle Eastern food with our Minnesota side.Stephanie:It's funny that you mentioned that today because, prior to talking with you, the way that taste buds works usually is we go out and we have an adventure somewhere. And in this episode, that adventure was with you guys in your home. And then we take what we learned from that adventure, and we come back into my kitchen. And so one of the things that I made was your, what was it? It was the Egyptian orzo with ground beef, and it had cinnamon in it. It was super delicious. The recipe worked beautifully, and everybody loved it. But what was funny was when we were making it, my cameraman said, oh, it's just like a casserole or a hot dish. And so I laughed.Stephanie:I was like, yes. This is like the Egyptian hot dish. That's exactly the mashup.Alia Elkaffas:Exactly. Yep. And that's what we we always say. It's like an Egyptian, hamburger helper, you know, casserole. So it's it's yeah. It's really good.Stephanie:Even down to, like I don't know if you guys ever have had rice aaroni, but it was like a combination between rice and pasta, and you sauteed it just like you did with the orzo to get the color on the pasta. So it was just really it it was a delicious recipe. The other thing that we did that will surprise you maybe is I was trying to think about how to take what I learned from you and your book and the way you cook and make that kinda my own too because I think that's so much of what you inspire people to do. So I took the marinated tomato, and creamy whipped feta dip that we made on the show with you, and I took all those same ingredients literally to the letter, but we made a pasta bake with it.Radwa Elkaffas:Oh, that sounds delicious.Stephanie:Yeah. So you'll see that on the episode. We made it and we made it into, like, a pasta bake because when I was looking at the recipe that you guys made when we were in your kitchen, I was like, oh, this is kinda like that feta where the roasted tomatoes. And so that's the surprise for you that you'll see that we just took your dish and all the ingredients. It was very fun to and it was interesting too because, Michelle, my producer, she was like because she loved your dip so much. And then she was like, and it's so weird that this is the exact same ingredients, but the flavor profile is so different.Radwa Elkaffas:Changes everything.Stephanie:Yeah. And maybe just the roasting of the tomatoes too and the heat and the pasta because that was the one thing we did add. But it was really fun to think about how to take a recipe from your book, but kinda, like, just twist it with all the same stuff. It was fun.Alia Elkaffas:Yep. Awesome. Yeah. And that's what we love to do. We love taking these just these simple ingredients and just turning them into something amazing. You know? You don't need like, you don't need anything crazy and any crazy ingredients, and you could just make something that's really good and with simple ingredients.Stephanie:Yeah. I think that's why we really liked your recipes that also, we made a beautiful chicken dish. Do you wanna describe the chicken dish that we made?Radwa Elkaffas:Oh, that's sassy chicken and potatoes? Yes. And that's the thing. Like, we are busy moms who don't really have a lot of time, so we're always thinking, okay. What can we do that's just easy, delicious, and you could just throw it together. Literally throw everything into the baking dish, make your, marinade, and throw it together and pop it in the oven. So you could do it the night before, so it's a great make ahead, or you can make it the same day, but really just getting those flavors to infuse overnight is awesome. And who doesn't love having dinner the day before? So all you have to do is throw it in the oven when you're ready to eat it is exactly what we love to do.Stephanie:How many days a week do you okay. Let's just back up a second. You guys have I think we determined it was 8,000,000 followers over all the platforms. How many days a week do you actually spend together creating content versus the marketing and the managing of the content?Radwa Elkaffas:I think this that's the beauty of having 2 of us is we do a lot of divide and conquer, which really helps us a lot, and it alleviates a lot of pressure off of each other. There's things that we obviously have to do together, like our end shots. Or if we're filming, like, a recipe clip that we're actually in, then we have to be together. I think we just kinda take it week by week because maybe we have, like, a high sponsored week that we have to do our sponsors, or if we have a lighter week, or we, you know, are going on vacation and we need to film as many as we can so we can have a little bit extra, content. I think we just kind of take it week by week.Stephanie:When you look at your content calendar, how far in advance do you go, or do you just do it week by week?Radwa Elkaffas:I mean, I would love to say that we're the most organized, sisters ever, but we're not. We really just kind of sometimes we wing it. Sometimes even we don't recipe test the recipe. We're like, okay. Let's just try this, And sometimes it is a 100% fail and it does not work. And other times, we're like, we nailed that. Like, it is absolutely amazing, and then we get super excited. Sometimes those are our best recipes when it's just spur of the moment.Alia Elkaffas:I I was gonna say sometimes we have this, like, master plan. Oh, we're gonna make x y z today. It's gonna be great. And all of a sudden, we're in the middle of making it, and it turns into something a 100% different, and and we just we just goStephanie:with it.Alia Elkaffas:You know?Stephanie:Yeah. It's so fun. And the styling of the book, what I noticed when I was at your home is you both have a similar style, but your homes are very curated and full of beautiful art and beautiful flowers, and you have a a real, statement color palette. And that kinda translates to your work online and the book. Have you always been like that since you were little kids? Oh, you're both matching. You have all the perfect lips, the perfect hair, all the stuff.Radwa Elkaffas:You know, it's so funny. Like, our favorite color is really black and white. Like, it's not just something that we created for our brand. It is it's legit what we love. We love black and white. When we went through our brand and what we wanted it to look like, it was okay. How are we gonna incorporate this into our brand? Because what we like at home, this is what we do at home, and we also love it in our clothes. So it's not just we like black and white, and I I this might sound a little crazy that we love black and white and everything, but we do.Radwa Elkaffas:So it ended up being that we love it at home. We love it in the book. We love it in online. Like, it's just so it's it's just part of our, Food Dolls identity at this point.Stephanie:Can you remember the first thing you guys ever made, like, by yourselves just, like, as a kid? Or, like, did you have a first cookbook? Or do you remember just, like, that first thing you really made?Alia Elkaffas:I would I'm pretty sure the first thing we probably ever made together was probably baked cookies. You know? Like, just straight up cookies or a box of brownie mix or something.Stephanie:Totally. That is and, it was always like cookies or brownies because it was kind of a one bowl situation. Right? I didn't wanna make a mess with your mom. Is there a recipe that you feel like, a, gets a lot of attraction, but, b, like, really represents you? It's like, this is the one that we feel like is our statement.Radwa Elkaffas:Wow. That's a really good question. Okay. I will say this. Our most popular recipes are the most shocking that we would have never guessed that these are, like, the most popular recipes. We did, a a baked spaghetti that went absolutely crazy. Would we have thought that that was gonna be our number one recipe on the website? No. We love it, but people went crazy overAlia Elkaffas:it. Yeah.Radwa Elkaffas:So crazy. And it was it's just really shocking to us. But I think we kinda came to the conclusion is our top recipes are, like, the simplest, easiest. Like, you've got these recipe you've got these ingredients in your pantry. So all you have to do is throw it together, and I think that's what always wins.Stephanie:Yeah. And it's always surprising, like, the ones that get the most traction, and you just think like, wow. That's weird. Like, one of mine is this chao chao relish that they bake usually in the south, and I always have green tomatoes that I garden with. So I ended up just having to kind of make this thing, and it's, like, always in the top three. I don't know who's clicking on that recipe that much, but people are. It's weird.Alia Elkaffas:Yeah. It's funny how that works. It's just what what you think is gonna like, people are like, oh my god. This is so good. It's the opposite, and it's like something that, you know, is the most, like, and simple and basic. And you know?Stephanie:When we talk about your Egyptian heritage, and I asked you guys about this when we met, What is it specifically, like for instance, when we were doing the Orzo bake, they the the producer asked, she was like, what do you think about this makes it Egyptian? And I was, like, saying the flavor profiles and the types of ingredients that we use. But is there something that you feel like is uniquely Egyptian that you bring to the party?Alia Elkaffas:That's a really good question. So I'd say a lot of the dishes in the book are not necessarily, like, true Egyptian. It's got, like, some fusion to it with, like, Mediterranean flavors. And a lot of the, like, the real traditional Egyptian recipes might be a little bit more intricate, so we were trying to simplify it by using some of those those same flavor profiles, but not necessarily doing it step by step like our mom would do our aunts or grandma. You know?Stephanie:One of the ingredients in the casserole that we made was tomato paste, and you cooked down the tomato paste. But that like, when you think about tomatoes in warm climates, you know, the flavor is so intense and so concentrated, and you do kinda get that from a tomato paste. I hadn't really thought about that before.Alia Elkaffas:Yeah. That's very true. And we do have a lot of dishes that are very tomato based as well.Stephanie:Yeah. I love it. Okay. So when you guys are, like, absolutely exhausted and the kids are driving you crazy and it's 6 o'clock and you have to put something is there, like, a go to meal for each of you?Radwa Elkaffas:I'm, like, thinking about it because I'm like, okay. There's a lot. I feel like our like, the chicken and potatoes, I think, for sure, to just kind of throw together. But I really do love that to sit overnight. But if I'm, like, in a pinch, I will say the kids maybe sometimes eat something different than I do, because they're so picky. Like, I have a 4 year old, a 9 year old, and one wants, you know, quesadillas, and the other one's, like, fighting me on the chicken and potatoes and rice. Like so I would say that what it's always 2 different things. I'm not even gonna lie about it because they they drive me absolutely crazy about getting them to eat everything all at the same time and and the same thing.Radwa Elkaffas:So I would say for me, it would be the chicken potatoes. For them, it would definitely be some sort of pasta. And we love 1 pot pastas because you can have it ready in 15 minutes, and we have so many 1 pot pastas in our book.Stephanie:Yeah. You do have a lot. I tried to make the dish as a 1 pot with the pasta already in the baking dish and make the sauce right in the pan, but I couldn't get the right ratio of water to pasta. I made it twice, and the pasta kept coming out a little crunchy. So I'm done, and I just make I just made it I just boiled the pasta and did it that way and added it later. But I did try twice to get it, like because I kept thinking it would be so great if you could just do this all in the oven in the one pan. And maybe a different pan or a flatter pan, I could haveAlia Elkaffas:That could be. And it could be also the kind of pasta that sometimes makes a difference as well.Stephanie:Yeah. I should have tried an orzo, but I had a penne. So yep. Do you when your kids are, like, picky like that, do you feel like, okay. No, kids. This is what I made. This is what we're eating. I'm not a short order cook.Stephanie:Or are you more lax and you're like, just whatever we're eating, go ahead. Eat it as long as you eat.Radwa Elkaffas:I would have to say I kind of started, especially with my kids, learning how they are, and I don't care if I make the same thing every single week if I know they're gonna eat it. Why am I gonna sit here and fight every single week to try to get them to try new things? Because I I see I see Alia as, like, the perfect examples because my kids are younger. Hers are older. So now they're starting to eat anything. So I know hopefully, eventually, they'll get there, but we're in this, like, little phase right now where I'm trying to just get them to eat. I just want them to eat. I don't care what they eat. I just want them to eat the dinner.Radwa Elkaffas:So I will make the same things over and over and over again because I know they like it, and I know they'll eat it. SoAlia Elkaffas:I was gonna say a lot of times, like, even, like, for example, we do have, like, a southwest salad in the cookbook. So what I'll do instead of assembling it altogether as a salad, I kind of keep it some of the components separate so all the kids could kind of grab what they do like and what they don't like. So that way, it's like it feels custom to them versus, you know, making it putting everything together and forcing them to eat it as is.Stephanie:That's smart. It's like the Chipotle method. Right? Giving them choices. Yep. I I do think too, like, we spend a lot of time worrying about stuff that's probably not super consequential in the grand scheme of life. Kids are gonna eat, you know. Sooner or later, they're gonna eat. Sooner or later, they're gonna develop their palate whether, you know, they were part of the clean plate club or not.Stephanie:It feels like kind of a weird thing to worry about looking back on my childhood and how much time and struggle there was about, like, what you ate and you couldn't leave the table till you ate it and just kinda dumb. When you think about social media with your kids, I noticed that we don't really see your kids. Is that intentional, or how do you feel like you want your kids to show up as, teenagers and young adults in this profile of their moms being so famous?Alia Elkaffas:Yes. That is a great question. So we purposely, we do not put our kids on social media, and we have very, very little images of images of them anywhere just to protect their privacy as well. You know? And it's like once stuff is out in social media, once it's out in the world, it's out there forever. So, yeah, we choose to keep them up.Radwa Elkaffas:Sure that they have that decision later. You know? Like, it will not come back at us. Like, why did you put me on there? You know? Have that choice later. And so now we're gonna be mama bears and just protect them.Stephanie:I think too we're seeing, the social media I guess Facebook just turned 20 recently, which is hard to believe. But when it first came about, you know, like, we were just on it, and it was new, and it was exciting, and we didn't really think about the big picture. And I think now if I had my daughter's 25. So if I had it I made her wait till 13. And if I had to do it all over again and I was in this day and age, I definitely would I might get my kid, like, a flip phone or something terrible that they can only call me on, but I would have waited because I do think social media adds an element to young, kids' lives that maybe they don't need or aren't ready for it until later.Radwa Elkaffas:Absolutely. A 100% agree with you on that.Stephanie:How do your parents feel about your business?Radwa Elkaffas:I think it took them such a long time to fully understand it.Stephanie:It's probably soRadwa Elkaffas:weird. Grasp what we what it is exactly we are doing. But I we know that they're so proud of us and super excited to see us do this and, you know, especially mom, you know, she was a really big influence for us growing up and in in the cooking world. So we love making them proud.Stephanie:Do you have anxiety about, like, keeping up or, like, always being on the churn? And what do you do for, like, self care?Alia Elkaffas:Oh, that's a great one. Yes. I'd say we do have definitely have the anxiety, but we try to we always talk each other down, calm each other down, and just know that, you know, just talk things through together. But and I'd say probably self care. We like to work out just to kind of, you know, really get the release those endorphins. You know?Radwa Elkaffas:And we we actually do yell at each other, like, stop working. You need to stop working. Stop looking at your screen. Put your computer down. Stop doing this. We do that all all the time to each other.Alia Elkaffas:Yep.Stephanie:What are your favorite types of workouts?Radwa Elkaffas:I would say lifting and walking.Stephanie:What was lifting and walking?Alia Elkaffas:Yep. Same lifting, walking, and, you know, doing some sort of cardio.Stephanie:Yeah. And you have kids too. So you're probably trying to fit it in when you can. And it's hard to, like, go to a structured gym and do all that when you've got a lot of family at home and, a structured gym and do all that when you've got a lot of family at home. And how do you feel about working from home? And does that work for your schedules? Or do you ever visualize, like, someday having an office where you have all your production stuff? AndRadwa Elkaffas:I I love working from home because of the flexibility and having everything at home where you could quickly just, but it it's definitely a challenge to disconnect sometimes because work is home, home is work. So it's hard to, like, break the 2 apart. But it's nice that we have 2 houses. So if we need a break from 1 house, we go to the other one.Stephanie:Yeah. That is nice. Like, just it because it can just feel so much like, oh, you're just in your house all the time doing all this stuff.Alia Elkaffas:And it's it really is hard to disconnect. So it's not like we try to have work hours, but it's like it's almost impossible. So, like, we'll work, and then we'll take a break, even run kids' activities, come back, finish working. So it's like it feels like sometimes it's like a nonstop cycle. But, yeah, that's when we have to put each other in check, say, get off and go take a break.Stephanie:Yeah. Okay. Switching gears, what is your and each of you can have a separate answer, of course, but what is your, like, most used kitchen utensil or gadget or thing that, like, you could not live without?Radwa Elkaffas:Air fryer.Stephanie:That was so fast.Radwa Elkaffas:Absolutely. I have to suck at her on.Stephanie:Yeah. Yep. Really? I I use my air fryer so rarely. It's in the garage. Like, do you use it every day? What are you doing with it?Radwa Elkaffas:Every single day. Like, there is not a day that goes by that I don't use that.Alia Elkaffas:Really? For reheating things, for making things. We actually do have some instructions in the cookbook. Like, if if you wanna make this recipe in an air fryer, how to do that. But it just makes things so much easier even if, like, the kids wanna make chicken and fries or something. You know? It crisps it up perfectly, and it feels like you're eating it, you know, freshly, like, deep fried. You know?Stephanie:Alright. I'm gonna have to get my air fryer out of the garage and give it another try. I just I don't know. It's like, and I have a convection oven too. So I think the convection oven does the same thing, but I don't have kids, so maybe that's different, you know, just the speed and convenience of it being right on the counter like that.Radwa Elkaffas:And you mentioned what we do on there. And, honestly, like, even we do, like, French toast. Like, if you wanna make French toast, you can throw your French toast in there. Or if you make a marinated chicken, just throw it in there, shut it, and it's done in no time. And you don't have to worry about a mess.Stephanie:Yeah. And it goes faster too. You guys will be on a book tour, I'm imagining. Is that all coming together, and how is that feeling?Radwa Elkaffas:It's exciting. Super excited to do that. That's gonna be end of February, beginning of March. We have we're stopping at 5 different cities. So we're really excited about that.Alia Elkaffas:And our last office is gonna be here in Minneapolis.Stephanie:So we're gonna so great. Do you know where you're gonna be or what you're doing yet?Alia Elkaffas:We're gonna be at the Barnes and Noble in Edina. So that'll be where I don't think we have a confirmed time yet, but that'll be on March. It's a Sunday, March 2nd, I believe.Stephanie:Alright. Well, when you know, just let me know, and I'll make sure and share it. It's been super fun just chatting with you guys. I knew just from kinda following you that I like, oh, I'm gonna like these girls. But really, honestly, it was, like, one of my best days. And I just so proud of you, and I feel like you know, how you you meet people and you want them to be successful or you're so proud of their success? That's how I feel about you guys. You really work hard, and you've really earned, everything that's coming your way. And I think the book's gonna be amazing, and it was just it's been fun to just be a little tiny, tiny part of the journey for a second.Stephanie:It's been a blast.Radwa Elkaffas:Thank you so much. And, honestly, your energy that you brought to that table last week was everything. You made us feel so good, and we we we felt like a $1,000,000 after you left. So thankAlia Elkaffas:you for having me. So honored to have gotten to work with you, and now we get to be friends and Yes.Stephanie:I'm I'm actually I just I'm planning, I I I booked a do you know, a Khmeran feast at Vinay? And I've had one for a while, and so I was like, oh, I wonder. Maybe I'll do a gathering of, like, food ladies just to do something fun and different.Radwa Elkaffas:Yeah.Stephanie:Alright, you guys. Your book's gonna be great. Keep me in the loop. I'll keep you in the loop if anything fun's happening. And just thanks for being taste buds.Radwa Elkaffas:Awesome. Thank you so much.Stephanie:Alright. We'll see you soon. Bye. Bye bye. This is a public episode. If you'd like to discuss this with other subscribers or get access to bonus episodes, visit stephaniehansen.substack.com/subscribe
Born and raised in the Midwest to parents originally from Egypt, sisters Alia and Radwa Elkaffas created their Food Dolls platform to share exciting, fast, healthy meals. Born and raised in the Twin Cities to parents originally from Egypt, their recipes from “Pretty Delicious” are flavor-packed, Mediterranean-inspired, and plated with their signature style.Recently, we had a chance to catch up with the Food Dolls sisters on the eve of their cookbook launch for “Pretty Delicious” (pre-order the book here now) when we recorded a “Taste Buds With Stephanie” (episode drops on Fox 9 2/22/2025 at 8:30 am. ) at Radwa's gorgeous home. The sisters were as delightful and warm as ever, and we loved the recipes. “10 out of 10.” We made 3 recipes from the book, “Pretty Delicious”. I also riffed on their Marinated Tomatoes and Feta Dip and made it my own with all the same ingredients but as a baked pasta dish in homage to their talents.Cheesy Tomato and Feta Baked with Pasta and HerbsBy Stephanie Hansen Ingredients* 2 cups cherry tomatoes about 1 pint* 1/4 cup olive oil* 2 teaspoons salt* 1 teaspoon pepper* 8 oz. full-fat cream cheese at room temperature* 8 oz. feta cheese at room temperature* juice of half a lemon* 1 Tablespoon honey* 1/4 cup fresh parsley* 1/4 cup fresh basil* 1/4 cup fresh mint* 8 oz penne pastaInstructionsPreheat the oven to 400°F.Add the tomatoes, olive oil, salt, pepper, lemon and honey to a 9 x 13 baking dish.Nestle the cream cheese and feta cheese in the center of the baking dish amongst the tomatoesBake for 22-25 minutesMeanwhile, boil the pasta until el denteRemove from the oven and add the sour cream and stir the mixture, breaking it up combining the cheese and the tomatoes with the pasta making a saucetop with the fresh basil, parsley and mint, and serve hotEPISODE TRANSCRIPT:Stephanie:Hello, everybody, and welcome to Dishing with Stephanie's dish, the podcast where we talk to people equally obsessed in the food spaces as we are. And today, I'm with the Food Dolls. I'm with Radwa and Alia Elkaffas, and we had an opportunity to record a taste buds episode with them that will air at the end of February. I think it's gonna be February 22nd right on the eve of your book being available at stores.Alia Elkaffas:It well, we go live on the 25th.Stephanie:Okay. So you can preorder, though, your book Pretty Delicious right now. And if we talk about cookbooks in particular, the preorder is like it's crazy because what people don't know is all those preorders that you say you want this book, they count towards day 1 sales. And for people like Food Dolls who have such a massive following, it could be the day that launches them potentially to the top of the New York Times, cookbook list. So preorders for cookbook authors are super important. So we want you to get your books when they come out live, but we also want you to preorder because all of that stacked up on that first day counts to get them we're trying to get them on the New York Times bestseller list with their book. Would you like that, girls?Radwa Elkaffas:That would be just a dream.Stephanie:I know. It would. When when we spent time together in your home and watching you guys make your magic, When I left, one of the things that I asked, I'm like, so, you know, what are your intentions? And you were like, we wanna get our book on the New York Times bestseller list. And I think I really think you can do it because you guys have such a huge following. The book is so great. It's pretty delicious. Can we just back up? Like, you guys said you've been doing this pretty much since pre pandemic, but I feel like, you know, you've amassed such a huge following. Like, how did it get started?Radwa Elkaffas:Well, first of all, thank you so much for having me on, and it was so fun cooking with you last week. I well, we definitely started around 9 years ago now, which is so crazy to think that it's been that long. I think when we first started, we didn't really have, like, the best direction of what exactly Sure.Stephanie:No one did.Radwa Elkaffas:And we were trying to figure out social media. Both of our backgrounds were not chefs. We have no we have no photography background, no videography background. We had nothing, but we just knew that we love to cook, and we wanted to share with the world how easy and delicious you can make recipes. And I think that's been it since day 1. Our shift kind of changed a few years later on really kind of honing in on, like, our culture and our background and what we grew up eating, and people loved it. People loved it, and they love our, like, sister vibe.Stephanie:Yeah. You 2 are real life sisters, and are you 4 years apart?Alia Elkaffas:Yes. That's right.Stephanie:And, your background is your parents are from Egypt. Right. So you're you're leaning into that sort of cultural vibe. And what maybe a lot of people don't know, and I know a tiny, tiny bit, but, that Egypt is a very modern place all told. Like, can you just give us a little bit of, why it's a touchstone for you to still be speaking about this food that you guys have lived here most of your lives, but you still feel like this is such an influence for you?Alia Elkaffas:So our parents were they immigrated here in the early eighties. And so we were both born and raised here, but they really tried very hard to keep our Egyptian background alive. So whether it was with food, with, cultures, traditions. So, basically, we're very we're very Egyptian and Midwestern at the same time. So you even see a lot of our recipes. We do fusions between Egyptian and Mediterranean, Middle Eastern food with our Minnesota side.Stephanie:It's funny that you mentioned that today because, prior to talking with you, the way that taste buds works usually is we go out and we have an adventure somewhere. And in this episode, that adventure was with you guys in your home. And then we take what we learned from that adventure, and we come back into my kitchen. And so one of the things that I made was your, what was it? It was the Egyptian orzo with ground beef, and it had cinnamon in it. It was super delicious. The recipe worked beautifully, and everybody loved it. But what was funny was when we were making it, my cameraman said, oh, it's just like a casserole or a hot dish. And so I laughed.Stephanie:I was like, yes. This is like the Egyptian hot dish. That's exactly the mashup.Alia Elkaffas:Exactly. Yep. And that's what we we always say. It's like an Egyptian, hamburger helper, you know, casserole. So it's it's yeah. It's really good.Stephanie:Even down to, like I don't know if you guys ever have had rice aaroni, but it was like a combination between rice and pasta, and you sauteed it just like you did with the orzo to get the color on the pasta. So it was just really it it was a delicious recipe. The other thing that we did that will surprise you maybe is I was trying to think about how to take what I learned from you and your book and the way you cook and make that kinda my own too because I think that's so much of what you inspire people to do. So I took the marinated tomato, and creamy whipped feta dip that we made on the show with you, and I took all those same ingredients literally to the letter, but we made a pasta bake with it.Radwa Elkaffas:Oh, that sounds delicious.Stephanie:Yeah. So you'll see that on the episode. We made it and we made it into, like, a pasta bake because when I was looking at the recipe that you guys made when we were in your kitchen, I was like, oh, this is kinda like that feta where the roasted tomatoes. And so that's the surprise for you that you'll see that we just took your dish and all the ingredients. It was very fun to and it was interesting too because, Michelle, my producer, she was like because she loved your dip so much. And then she was like, and it's so weird that this is the exact same ingredients, but the flavor profile is so different.Radwa Elkaffas:Changes everything.Stephanie:Yeah. And maybe just the roasting of the tomatoes too and the heat and the pasta because that was the one thing we did add. But it was really fun to think about how to take a recipe from your book, but kinda, like, just twist it with all the same stuff. It was fun.Alia Elkaffas:Yep. Awesome. Yeah. And that's what we love to do. We love taking these just these simple ingredients and just turning them into something amazing. You know? You don't need like, you don't need anything crazy and any crazy ingredients, and you could just make something that's really good and with simple ingredients.Stephanie:Yeah. I think that's why we really liked your recipes that also, we made a beautiful chicken dish. Do you wanna describe the chicken dish that we made?Radwa Elkaffas:Oh, that's sassy chicken and potatoes? Yes. And that's the thing. Like, we are busy moms who don't really have a lot of time, so we're always thinking, okay. What can we do that's just easy, delicious, and you could just throw it together. Literally throw everything into the baking dish, make your, marinade, and throw it together and pop it in the oven. So you could do it the night before, so it's a great make ahead, or you can make it the same day, but really just getting those flavors to infuse overnight is awesome. And who doesn't love having dinner the day before? So all you have to do is throw it in the oven when you're ready to eat it is exactly what we love to do.Stephanie:How many days a week do you okay. Let's just back up a second. You guys have I think we determined it was 8,000,000 followers over all the platforms. How many days a week do you actually spend together creating content versus the marketing and the managing of the content?Radwa Elkaffas:I think this that's the beauty of having 2 of us is we do a lot of divide and conquer, which really helps us a lot, and it alleviates a lot of pressure off of each other. There's things that we obviously have to do together, like our end shots. Or if we're filming, like, a recipe clip that we're actually in, then we have to be together. I think we just kinda take it week by week because maybe we have, like, a high sponsored week that we have to do our sponsors, or if we have a lighter week, or we, you know, are going on vacation and we need to film as many as we can so we can have a little bit extra, content. I think we just kind of take it week by week.Stephanie:When you look at your content calendar, how far in advance do you go, or do you just do it week by week?Radwa Elkaffas:I mean, I would love to say that we're the most organized, sisters ever, but we're not. We really just kind of sometimes we wing it. Sometimes even we don't recipe test the recipe. We're like, okay. Let's just try this, And sometimes it is a 100% fail and it does not work. And other times, we're like, we nailed that. Like, it is absolutely amazing, and then we get super excited. Sometimes those are our best recipes when it's just spur of the moment.Alia Elkaffas:I I was gonna say sometimes we have this, like, master plan. Oh, we're gonna make x y z today. It's gonna be great. And all of a sudden, we're in the middle of making it, and it turns into something a 100% different, and and we just we just goStephanie:with it.Alia Elkaffas:You know?Stephanie:Yeah. It's so fun. And the styling of the book, what I noticed when I was at your home is you both have a similar style, but your homes are very curated and full of beautiful art and beautiful flowers, and you have a a real, statement color palette. And that kinda translates to your work online and the book. Have you always been like that since you were little kids? Oh, you're both matching. You have all the perfect lips, the perfect hair, all the stuff.Radwa Elkaffas:You know, it's so funny. Like, our favorite color is really black and white. Like, it's not just something that we created for our brand. It is it's legit what we love. We love black and white. When we went through our brand and what we wanted it to look like, it was okay. How are we gonna incorporate this into our brand? Because what we like at home, this is what we do at home, and we also love it in our clothes. So it's not just we like black and white, and I I this might sound a little crazy that we love black and white and everything, but we do.Radwa Elkaffas:So it ended up being that we love it at home. We love it in the book. We love it in online. Like, it's just so it's it's just part of our, Food Dolls identity at this point.Stephanie:Can you remember the first thing you guys ever made, like, by yourselves just, like, as a kid? Or, like, did you have a first cookbook? Or do you remember just, like, that first thing you really made?Alia Elkaffas:I would I'm pretty sure the first thing we probably ever made together was probably baked cookies. You know? Like, just straight up cookies or a box of brownie mix or something.Stephanie:Totally. That is and, it was always like cookies or brownies because it was kind of a one bowl situation. Right? I didn't wanna make a mess with your mom. Is there a recipe that you feel like, a, gets a lot of attraction, but, b, like, really represents you? It's like, this is the one that we feel like is our statement.Radwa Elkaffas:Wow. That's a really good question. Okay. I will say this. Our most popular recipes are the most shocking that we would have never guessed that these are, like, the most popular recipes. We did, a a baked spaghetti that went absolutely crazy. Would we have thought that that was gonna be our number one recipe on the website? No. We love it, but people went crazy overAlia Elkaffas:it. Yeah.Radwa Elkaffas:So crazy. And it was it's just really shocking to us. But I think we kinda came to the conclusion is our top recipes are, like, the simplest, easiest. Like, you've got these recipe you've got these ingredients in your pantry. So all you have to do is throw it together, and I think that's what always wins.Stephanie:Yeah. And it's always surprising, like, the ones that get the most traction, and you just think like, wow. That's weird. Like, one of mine is this chao chao relish that they bake usually in the south, and I always have green tomatoes that I garden with. So I ended up just having to kind of make this thing, and it's, like, always in the top three. I don't know who's clicking on that recipe that much, but people are. It's weird.Alia Elkaffas:Yeah. It's funny how that works. It's just what what you think is gonna like, people are like, oh my god. This is so good. It's the opposite, and it's like something that, you know, is the most, like, and simple and basic. And you know?Stephanie:When we talk about your Egyptian heritage, and I asked you guys about this when we met, What is it specifically, like for instance, when we were doing the Orzo bake, they the the producer asked, she was like, what do you think about this makes it Egyptian? And I was, like, saying the flavor profiles and the types of ingredients that we use. But is there something that you feel like is uniquely Egyptian that you bring to the party?Alia Elkaffas:That's a really good question. So I'd say a lot of the dishes in the book are not necessarily, like, true Egyptian. It's got, like, some fusion to it with, like, Mediterranean flavors. And a lot of the, like, the real traditional Egyptian recipes might be a little bit more intricate, so we were trying to simplify it by using some of those those same flavor profiles, but not necessarily doing it step by step like our mom would do our aunts or grandma. You know?Stephanie:One of the ingredients in the casserole that we made was tomato paste, and you cooked down the tomato paste. But that like, when you think about tomatoes in warm climates, you know, the flavor is so intense and so concentrated, and you do kinda get that from a tomato paste. I hadn't really thought about that before.Alia Elkaffas:Yeah. That's very true. And we do have a lot of dishes that are very tomato based as well.Stephanie:Yeah. I love it. Okay. So when you guys are, like, absolutely exhausted and the kids are driving you crazy and it's 6 o'clock and you have to put something is there, like, a go to meal for each of you?Radwa Elkaffas:I'm, like, thinking about it because I'm like, okay. There's a lot. I feel like our like, the chicken and potatoes, I think, for sure, to just kind of throw together. But I really do love that to sit overnight. But if I'm, like, in a pinch, I will say the kids maybe sometimes eat something different than I do, because they're so picky. Like, I have a 4 year old, a 9 year old, and one wants, you know, quesadillas, and the other one's, like, fighting me on the chicken and potatoes and rice. Like so I would say that what it's always 2 different things. I'm not even gonna lie about it because they they drive me absolutely crazy about getting them to eat everything all at the same time and and the same thing.Radwa Elkaffas:So I would say for me, it would be the chicken potatoes. For them, it would definitely be some sort of pasta. And we love 1 pot pastas because you can have it ready in 15 minutes, and we have so many 1 pot pastas in our book.Stephanie:Yeah. You do have a lot. I tried to make the dish as a 1 pot with the pasta already in the baking dish and make the sauce right in the pan, but I couldn't get the right ratio of water to pasta. I made it twice, and the pasta kept coming out a little crunchy. So I'm done, and I just make I just made it I just boiled the pasta and did it that way and added it later. But I did try twice to get it, like because I kept thinking it would be so great if you could just do this all in the oven in the one pan. And maybe a different pan or a flatter pan, I could haveAlia Elkaffas:That could be. And it could be also the kind of pasta that sometimes makes a difference as well.Stephanie:Yeah. I should have tried an orzo, but I had a penne. So yep. Do you when your kids are, like, picky like that, do you feel like, okay. No, kids. This is what I made. This is what we're eating. I'm not a short order cook.Stephanie:Or are you more lax and you're like, just whatever we're eating, go ahead. Eat it as long as you eat.Radwa Elkaffas:I would have to say I kind of started, especially with my kids, learning how they are, and I don't care if I make the same thing every single week if I know they're gonna eat it. Why am I gonna sit here and fight every single week to try to get them to try new things? Because I I see I see Alia as, like, the perfect examples because my kids are younger. Hers are older. So now they're starting to eat anything. So I know hopefully, eventually, they'll get there, but we're in this, like, little phase right now where I'm trying to just get them to eat. I just want them to eat. I don't care what they eat. I just want them to eat the dinner.Radwa Elkaffas:So I will make the same things over and over and over again because I know they like it, and I know they'll eat it. SoAlia Elkaffas:I was gonna say a lot of times, like, even, like, for example, we do have, like, a southwest salad in the cookbook. So what I'll do instead of assembling it altogether as a salad, I kind of keep it some of the components separate so all the kids could kind of grab what they do like and what they don't like. So that way, it's like it feels custom to them versus, you know, making it putting everything together and forcing them to eat it as is.Stephanie:That's smart. It's like the Chipotle method. Right? Giving them choices. Yep. I I do think too, like, we spend a lot of time worrying about stuff that's probably not super consequential in the grand scheme of life. Kids are gonna eat, you know. Sooner or later, they're gonna eat. Sooner or later, they're gonna develop their palate whether, you know, they were part of the clean plate club or not.Stephanie:It feels like kind of a weird thing to worry about looking back on my childhood and how much time and struggle there was about, like, what you ate and you couldn't leave the table till you ate it and just kinda dumb. When you think about social media with your kids, I noticed that we don't really see your kids. Is that intentional, or how do you feel like you want your kids to show up as, teenagers and young adults in this profile of their moms being so famous?Alia Elkaffas:Yes. That is a great question. So we purposely, we do not put our kids on social media, and we have very, very little images of images of them anywhere just to protect their privacy as well. You know? And it's like once stuff is out in social media, once it's out in the world, it's out there forever. So, yeah, we choose to keep them up.Radwa Elkaffas:Sure that they have that decision later. You know? Like, it will not come back at us. Like, why did you put me on there? You know? Have that choice later. And so now we're gonna be mama bears and just protect them.Stephanie:I think too we're seeing, the social media I guess Facebook just turned 20 recently, which is hard to believe. But when it first came about, you know, like, we were just on it, and it was new, and it was exciting, and we didn't really think about the big picture. And I think now if I had my daughter's 25. So if I had it I made her wait till 13. And if I had to do it all over again and I was in this day and age, I definitely would I might get my kid, like, a flip phone or something terrible that they can only call me on, but I would have waited because I do think social media adds an element to young, kids' lives that maybe they don't need or aren't ready for it until later.Radwa Elkaffas:Absolutely. A 100% agree with you on that.Stephanie:How do your parents feel about your business?Radwa Elkaffas:I think it took them such a long time to fully understand it.Stephanie:It's probably soRadwa Elkaffas:weird. Grasp what we what it is exactly we are doing. But I we know that they're so proud of us and super excited to see us do this and, you know, especially mom, you know, she was a really big influence for us growing up and in in the cooking world. So we love making them proud.Stephanie:Do you have anxiety about, like, keeping up or, like, always being on the churn? And what do you do for, like, self care?Alia Elkaffas:Oh, that's a great one. Yes. I'd say we do have definitely have the anxiety, but we try to we always talk each other down, calm each other down, and just know that, you know, just talk things through together. But and I'd say probably self care. We like to work out just to kind of, you know, really get the release those endorphins. You know?Radwa Elkaffas:And we we actually do yell at each other, like, stop working. You need to stop working. Stop looking at your screen. Put your computer down. Stop doing this. We do that all all the time to each other.Alia Elkaffas:Yep.Stephanie:What are your favorite types of workouts?Radwa Elkaffas:I would say lifting and walking.Stephanie:What was lifting and walking?Alia Elkaffas:Yep. Same lifting, walking, and, you know, doing some sort of cardio.Stephanie:Yeah. And you have kids too. So you're probably trying to fit it in when you can. And it's hard to, like, go to a structured gym and do all that when you've got a lot of family at home and, a structured gym and do all that when you've got a lot of family at home. And how do you feel about working from home? And does that work for your schedules? Or do you ever visualize, like, someday having an office where you have all your production stuff? AndRadwa Elkaffas:I I love working from home because of the flexibility and having everything at home where you could quickly just, but it it's definitely a challenge to disconnect sometimes because work is home, home is work. So it's hard to, like, break the 2 apart. But it's nice that we have 2 houses. So if we need a break from 1 house, we go to the other one.Stephanie:Yeah. That is nice. Like, just it because it can just feel so much like, oh, you're just in your house all the time doing all this stuff.Alia Elkaffas:And it's it really is hard to disconnect. So it's not like we try to have work hours, but it's like it's almost impossible. So, like, we'll work, and then we'll take a break, even run kids' activities, come back, finish working. So it's like it feels like sometimes it's like a nonstop cycle. But, yeah, that's when we have to put each other in check, say, get off and go take a break.Stephanie:Yeah. Okay. Switching gears, what is your and each of you can have a separate answer, of course, but what is your, like, most used kitchen utensil or gadget or thing that, like, you could not live without?Radwa Elkaffas:Air fryer.Stephanie:That was so fast.Radwa Elkaffas:Absolutely. I have to suck at her on.Stephanie:Yeah. Yep. Really? I I use my air fryer so rarely. It's in the garage. Like, do you use it every day? What are you doing with it?Radwa Elkaffas:Every single day. Like, there is not a day that goes by that I don't use that.Alia Elkaffas:Really? For reheating things, for making things. We actually do have some instructions in the cookbook. Like, if if you wanna make this recipe in an air fryer, how to do that. But it just makes things so much easier even if, like, the kids wanna make chicken and fries or something. You know? It crisps it up perfectly, and it feels like you're eating it, you know, freshly, like, deep fried. You know?Stephanie:Alright. I'm gonna have to get my air fryer out of the garage and give it another try. I just I don't know. It's like, and I have a convection oven too. So I think the convection oven does the same thing, but I don't have kids, so maybe that's different, you know, just the speed and convenience of it being right on the counter like that.Radwa Elkaffas:And you mentioned what we do on there. And, honestly, like, even we do, like, French toast. Like, if you wanna make French toast, you can throw your French toast in there. Or if you make a marinated chicken, just throw it in there, shut it, and it's done in no time. And you don't have to worry about a mess.Stephanie:Yeah. And it goes faster too. You guys will be on a book tour, I'm imagining. Is that all coming together, and how is that feeling?Radwa Elkaffas:It's exciting. Super excited to do that. That's gonna be end of February, beginning of March. We have we're stopping at 5 different cities. So we're really excited about that.Alia Elkaffas:And our last office is gonna be here in Minneapolis.Stephanie:So we're gonna so great. Do you know where you're gonna be or what you're doing yet?Alia Elkaffas:We're gonna be at the Barnes and Noble in Edina. So that'll be where I don't think we have a confirmed time yet, but that'll be on March. It's a Sunday, March 2nd, I believe.Stephanie:Alright. Well, when you know, just let me know, and I'll make sure and share it. It's been super fun just chatting with you guys. I knew just from kinda following you that I like, oh, I'm gonna like these girls. But really, honestly, it was, like, one of my best days. And I just so proud of you, and I feel like you know, how you you meet people and you want them to be successful or you're so proud of their success? That's how I feel about you guys. You really work hard, and you've really earned, everything that's coming your way. And I think the book's gonna be amazing, and it was just it's been fun to just be a little tiny, tiny part of the journey for a second.Stephanie:It's been a blast.Radwa Elkaffas:Thank you so much. And, honestly, your energy that you brought to that table last week was everything. You made us feel so good, and we we we felt like a $1,000,000 after you left. So thankAlia Elkaffas:you for having me. So honored to have gotten to work with you, and now we get to be friends and Yes.Stephanie:I'm I'm actually I just I'm planning, I I I booked a do you know, a Khmeran feast at Vinay? And I've had one for a while, and so I was like, oh, I wonder. Maybe I'll do a gathering of, like, food ladies just to do something fun and different.Radwa Elkaffas:Yeah.Stephanie:Alright, you guys. Your book's gonna be great. Keep me in the loop. I'll keep you in the loop if anything fun's happening. And just thanks for being taste buds.Radwa Elkaffas:Awesome. Thank you so much.Stephanie:Alright. We'll see you soon. Bye. Bye bye. This is a public episode. If you'd like to discuss this with other subscribers or get access to bonus episodes, visit stephaniehansen.substack.com/subscribe
Do you ever find yourself spinning a million plates while trying to rock both motherhood and business?
Joël and Stephanie talk RailsConf! (https://railsconf.org/). Joël shares how he performed as a D&D character, Glittersense the gnome, to make his Turbo features talk entertaining and interactive. Stephanie's talk focused on addressing test pain by connecting it to code coupling, offering practical insights and solutions. They agree on the importance of continuous improvement as speakers and developers and trying new approaches in talks and code design, and recommend Jared Norman's RailsConf talk on design patterns, too! That One Thing: Reduce Coupling for More Scalable and Sustainable Software (https://www.informit.com/articles/article.aspx?p=2222816) Connascence.io (https://connascence.io/) [Connascence as a vocabulary to discuss coupling](https://thoughtbot.com/blog/connascence-as-a-vocabulary-to-discuss-coupling](https://thoughtbot.com/blog/connascence-as-a-vocabulary-to-discuss-coupling) The value of specialized vocabulary (https://bikeshed.thoughtbot.com/356?t=0) Transcript: We're excited to announce a new workshop series for helping you get that startup idea you have out of your head and into the world. It's called Vision to Value. Over a series of 90-minute working sessions, you'll work with a thoughtbot product strategist and a handful of other founders to start testing your idea in the market and make a plan for building an MVP. Join for all seven of the weekly sessions or pick and choose the ones that address your biggest challenge right now. Learn more and sign up at tbot.io/visionvalue. JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: So, I think I can speak for both of us and say what's new in our world is that you and I just came back from RailsConf in Detroit. JOËL: Yeah, we were there for, I guess, it's a three-day conference. Both of us were giving talks. STEPHANIE: Yeah. I don't think we've both spoken at a conference for at least a little over a year, so that was really fun kind of to catch up in person. And there was a whole crew of thoughtboters who were there. Yeah, I feel like we were hanging out, like, a lot [chuckles] all of last week, just seeing each other, talking about, you know, rehearsing our talks and spending time together on...there was, like, a hack day, and we were sitting at the table together. So, I feel like I'm totally caught up on everything that's new in your world, and that's it. That's the end of the show [laughs]. JOËL: On that note, shall we wrap up? STEPHANIE: [laughs] That would not be very fair to our listeners. [laughter] JOËL: Yeah. So, how was the conference speaking experience for you? STEPHANIE: Ooh, it was really great this year. I have not spoken at a RailsConf before, so this was actually, I think, a bigger stage than I had experienced before, and I had a great time. I met Ruby friends, new and old, and, yeah, I left feeling very gooeyed, and very energized, and just so grateful for the Rails community [laughs]. Yeah, I had a very lovely time, kind of being a little bit outside my normal life for a few days. And I think my favorite part about these things is just like, anywhere you go, you can kind of just have a shared interest with someone, and you can start a conversation with them. JOËL: That's really interesting. Do you find yourself just reaching out to strangers at conferences like this? Or do you tend to just hang out with the people that you know? STEPHANIE: Oh, I think a little bit of both. I like to get meals with people I know. But if I'm just hanging out in, like, the lobby or if I happen to get a seat for a talk and I'm sitting next to someone that I don't know, I find it quite easy to just be like, "Hi, like, I'm Stephanie. Are you excited for this talk?" Or, like, "What good talks have you seen recently?" There's an aspect of, like, the social butterfly that comes out of me when I'm at these things. Because I just don't get to have, like, easy access to, I don't know, people with, like, that shared interest or people who are willing to just have a conversation with you normally, I think. JOËL: Yeah, would you describe yourself more as an introvert or an extrovert? STEPHANIE: I am an extroverted introvert [laughter]. I feel like maybe that might be interpreted as a non-answer, but I think I lean more on the introvert side. But you know when you're with a group of people, and there's not, like, a very clear extrovert in that conversation, and then you're like, oh, I have to do the heavy [chuckles] lifting of the social lubrication [laughs] in this conversation, I can step into that role, reluctantly [laughs]. JOËL: Okay. I like the label that you used, the extrovert introvert, in that I enjoy social situations. I do well in social situations. But they also consume a lot of energy for me. I don't necessarily get sort of recharged by doing social events. So, people will be surprised when they find out that I tend to talk about myself as an introvert because, like, "Oh, but you're, like, you know, you're not awkward. You engage very well in different group situations." STEPHANIE: You have a podcast [laughs]. JOËL: And the truth is I enjoy those things, right? I really like social interaction, but it does, after a while, wear me out. STEPHANIE: Yeah, that makes sense. I did want to spend a little bit of time talking about the talk you gave at RailsConf this year: "Dungeons & Dragons & Rails." JOËL: I got to have a lot of fun with the theme. The actual content was introducing people to Turbo by building an interactive Dungeons & Dragons character sheet using vanilla Rails and a little bit of Turbo. So, we're not even writing any JavaScript. We're just using the Turbo helpers, a little bit of Action Cable to mimic something a little bit like...people who are in the know might be familiar with the site D&D Beyond, which is kind of the official D&D online character sheet website. Of course, it wasn't anywhere near as fancy because it's a 30-minute talk and showcasing different features, but that's what we were aiming for. STEPHANIE: Yeah, you know, you've talked a bit about giving talks on the show before, but I wanted to get into what made this one different because I think it could be fun for our listeners. [laughter] JOËL: The way I structured this talk so it has a theme. It's about Dungeons & Dragons, and we're building a character sheet. The way I wrote the talk was it's broken up into chapters. Each chapter is teaching a new feature in Turbo that I want to show off. In order to motivate learning each of these features...because I don't like to just say, "Oh, here's a thing that technology can do. Oh, here's a thing that technology can do." That's boring. You need a reason to learn that. So, I needed a reason to say, "We need to add this to a character sheet." So, every sort of chapter of the talk opens up with a little narrative portion. We're following this character, Glittersense, the gnome, and he's on adventures. And at different points in the adventures, he's going to do different types of roles or need different stats and things. And so, when we reach the point in the adventure where we need that, we sort of freeze frame and then say, "Okay, let's add that as a feature to the character sheet." And then, oh no, it turns out that this feature is a little bit more complicated. We're going to have to learn a new Turbo feature to do that. Who would have guessed? And then, we learn a new Turbo feature together. And then, we go back to the narrative portion. The adventures of Glittersense continue. And then, oh no, we're going to need to add another feature to the character sheet. And that's sort of how the talk is structured. STEPHANIE: Yeah. And you did a really cool thing with the narrative portions, which was you basically performed as Glittersense, the gnome, voice and posture, and a lot of really great acting from you [laughs], in my opinion. JOËL: That is something that came out pretty late in the talk preparation. So, I knew I wanted this kind of alternating story and code structure. Then, like, the weekend before RailsConf, I'm running through my slide deck, and I realized, you know what? What if instead of narrating Glittersense's adventures, what if I went first person for those sections? Glittersense tells his own story. And then, from there, it wasn't a big jump to say, you know what? This is D&D. If I'm going first person and narrating, I really should do a voice. And this is a conversation I had with a couple of people at the speaker dinner. And, of course, everyone's like, "You should 100% do the voice." And I was really not feeling confident in my ability to pull it off. So, for the next two nights, because I was speaking on the third day, the next two nights at the conference, in the evenings, I'm in the hotel room in front of the mirror just practicing my gnome voice to try to get something that got the persona of Glitterense, the gnome, across to the audience. STEPHANIE: How would you describe the persona? JOËL: Very extra. STEPHANIE: [laughs] JOËL: Very high energy. STEPHANIE: Yes. The name Glittersense is very extra, after all. JOËL: [laughs]. I punctuated a lot of the things that he says with just high-pitched laughter. He's also...so, the framing device for all of this is that you're in a tavern listening to him tell his adventures. I wanted a little bit of the sense that Glittersense is maybe embellishing a little bit. I think it may be too much to say he's full of himself, but he's definitely making himself to be the hero of the story, and maybe making himself to be slightly cooler than he really was. STEPHANIE: Yeah. I definitely got, like, a little bit of eccentricity, too, from the persona. And you know when you just, I don't know, meet an older person who has, like, a lot of life experience, and they want to tell you about it [laughter], but you do kind of maybe have a little bit of suspicion around how much they're exaggerating [laughs]. But it was really fun. Everyone I talked to afterwards, like, loved it. And I got to share the little nugget that, like, oh yeah, and Joël only, like, started doing the voice, like, decided that he was going to do it two days ago. And they were just all really, like, blown away because it seemed so well practiced, and it was really fun. JOËL: I got to do something really fun, also, with physical space because Glittersense narrates his portion, sort of the story portions, but then the code portions where we're talking about Turbo, I'm talking in my own voice. And so, when I'm talking about Turbo, I'm standing at the lectern. And when I'm Glittersense, I'm kind of off to the side on the stage and doing the voice. And so, there's this almost, like, two worlds that are inhabited: one by Joël, the speaker, and one by Glittersense, the gnome. And it got to the point where I don't say or do anything. I only move from the lectern to the, like, portion of the stage where Glittersense lives. And the audience starts chuckling and, like, nothing has happened yet, like, no jokes have been told. No voice has happened. No slides have changed. But the anticipation, people know what's coming. STEPHANIE: Yeah. And I think the best part, what I really found just really fun and, I don't know, every time it happened, I just really enjoyed it, when you transitioned out of Glittersense, the gnome, and back to Joël because you were so nonchalant about it. You kind of, like, straighten up rather than having your little kind of crouchy gnome posture, and then just walk across back to the podium. And then, in your normal voice, go back to just, you know, sharing very...not necessarily dry, but just, like, straight to the point. "And this is, like, how you, you know, create a frame in [laughs] Turbo," as if nothing happened [laughs] when even just, like, you know, 20 seconds ago, you were just enthusing about, like, slaying the bandit, chieftain [laughter] known as Glittersense. JOËL: Uh-huh. I think, especially when I open, so I get introduced. I'm off stage. I walk onto the stage, and I'm immediately Glittersense. And I'm telling a story, and the intro goes on for, like, quite a while. It's a big story chunk. And then, at some point, I just walk over to the lectern, drop the voice, hit next slide, and it's my title slide. I'm just like, "Okay, now welcome to Dungeons & Dragons on Rails. We're going to build a character sheet together." STEPHANIE: Yeah, that's exactly the moment I'm thinking of. JOËL: The walking in as Glittersense and just immediately going to the voice caught everyone by surprise. And then, the, like, oh, he keeps going for this. Is the whole talk going to be like this? And then, the, like, just when you think, oh, he's really going for it, the, like, dropping it and going to the podium and title slide. It wasn't intended to be a funny moment, but I think the contrast and the fact that I just switched over was one of the biggest laughs I got. STEPHANIE: Yeah, I mean, I think that attests to how good the delivery of it was because that contrast was very felt. So, props to you. JOËL: I love the idea of, you know, the thought that you put into building a talk and, like, the narrative structure and the pedagogy of the stuff. And, I think, in this particular case, this is almost like a narrative approach called in media res, where you start kind of in the middle. You open your book, or your movie, or whatever in the middle of the story. And then, you kind of come back to the beginning at some point later. So, it starts with some kind of action scene that grabs your attention. So, in this case, my title slide is 10, 15 slides into the talk. We get immediately started with Glittersense and his adventures. And then, once we're sort of all bought into this world, then we move to the title slide and talk about, okay, we're here to build a character sheet and all that stuff. And I think that it wouldn't have had the same impact if I'd, like, opened with that and then gone into Glittersense's adventures. And that's something that was not the case at the beginning. I really reworked the talk to make it in that order. And I think that the talk had a lot more impact for doing that. STEPHANIE: Yeah, definitely. I guess I also just wanted to point out that this is very different from all your other talks. And I think it's really cool that, you know, you are a veteran speaker, but you still find ways to do something new and try something that you've never done before, and yeah, find ways, new ways to, like, speak and engage people and teach. I don't know, do you have just any thoughts about why or how you got into a position to be like, "Oh, you know, I'm going to do something super different this time around" [laughs]? JOËL: So, every talk I give, I try to do something new, something different, to push myself as a speaker to get better. That might be in the writing of the talk; that might be in the delivery. More recently, I've been trying to do more with dynamic presence on stage. So, when I spoke at RubyConf San Diego, I was trying to not just stand at the lectern but to learn to be able to give my talk while also, you know, walking around the stage, looking at the audience, making pauses where it's necessary, not to just be so into the delivery of the talk by just standing at the podium and, like, going through my deck, which is a small thing but I think is an area I wanted to improve in. This time, I was playing around with some more narrative framing and ended up, yeah, like, pushing it to an extreme. And it works with the theme because inhabiting a character and role-playing is the core part of D&D. Not everybody plays a D&D character by doing a voice. You are a little bit extra if you do that. But it's not uncommon for people to do a voice. And so, it kind of fit perfectly with my theme. I just needed to get the self-confidence to do it. So, thank you to everyone at the speaker dinner that was like, "No, you totally got this. You should do this," because I was feeling very unsure. STEPHANIE: It really paid off, so... JOËL: I'd like to circle back to your talk, though. So, you gave, basically, the first talk of the conference. You were the first session after the keynote. A theme that came up multiple times in your talk was this idea of coupling and how it affects different parts of our code and, particularly the way that we structure tests or the way that we feel test pain. How did you, when you were prepping this talk, discover that theme and decide to lift it up? Was that something that you knew ahead of time you wanted to talk about, or did it just sort of emerge as part of the talk preparation process? STEPHANIE: That's a really great question, and I'm glad you picked up on that. So, my talk was called: "So, Writing Tests Feels Painful. What Now?" Originally, when I came up with this idea, it actually started with coupling. I realized that I wanted to give a talk about coupling because it's just something that I was struggling with or, like, had seen other people struggle with and really wanting kind of a discrete resource, wanting to provide that. But as I was just thinking about it, I was like, oh, like, there are so many different ways that this could go. On one hand, it was a very like important topic to me, but also maybe too big of a topic. And so, I actually, like, kind of put that on the back burner. And it wasn't until later when I connected it to another...it wasn't necessarily different at all, but just, like, an extension of this idea is, oh, like, people are struggling with coupling in tests or, like, it manifests in tests. And so, I thought maybe that could be the angle that I took on this topic that kind of gave me a little bit more focus. And I didn't even end up saying like, "Yeah, this talk was, like, born out of just, you know, wrestling with coupling or anything like that." So, it's cool, to me, that you picked up on it as a theme because it was...I had, you know, ended up not being super explicit about it, but it was certainly, like, a thing that was driving the content from my perspective. JOËL: Interesting. So, it started as a coupling talk and then got sort of focused through the lens of testing. STEPHANIE: Yeah. And I think there was a part of me that was like, you know, I don't know if I could just teach the concept of coupling, like, by itself without the framing of testing for people who this is, like, a new concept for them. I realized that maybe it would be more effective to be like, "Hey, like, have you experienced test pain? You know, have you had to mock out a billion objects or changed, you know, made one change and then had to fix, like, a million tests subsequently? Then this talk is for you." And then weave in the idea of coupling in it to kind of start to help people feel familiar with it or just, like, identify it without as much, like, jargon as kind of I've seen when I've tried to figure out, like, how to manage it. JOËL: It's interesting because I think it gives you a, like, concrete, valuable thing to optimize for as opposed to, like, hey, let's lower coupling because then you're writing, you know, quote, unquote, "better code." And you get to feel better about yourself as a programmer because you're doing things the, quote, unquote, "right way." That's very kind of hand-wavy, and I think sometimes leads people down a bad path where they're optimizing things that they shouldn't be. But the tests give you this very concrete way to say, "Hey, we're not just trying to reach the, like, low score record for the app in terms of coupling. We're trying to reduce test pain. Tests are painful. And that pain is telling us something. It's telling us that we've crossed some sort of threshold for coupling. Let's find ways to reduce it, not so that we can feel good about ourselves, but so that our tests are actually manageable." STEPHANIE: Yeah, I am really glad you picked up on that, too, because I feel the exact same way when someone just tells me to decouple something or, like, makes a note that, like, oh, this feels really coupled. I don't know what that means necessarily. And it's not very convincing to just be like, "Oh, you should write loosely coupled code [laughs]," at least for me. What you said just now, it's like, it's not to feel good about ourselves, you know, to write code that way, but, actually, to just feel good about our code, period [laughs]. And, yeah, finding that validation through just, like, actually working with code that is easier to change that is the goal, not necessarily to, yeah, kind of pursue some totally subjective, like, metric. JOËL: So, one of the kinds of coupling that you called out, I think, was where you hardcode a class name of some other class in your object. And that feels, like, really sort of innocuous. Like, of course, my objects can talk to other objects. And maybe I want to, like, refer to a class somewhere. Why is that such a like tricky piece of coupling to work with? STEPHANIE: It's not necessarily intentional sometimes. Like, you just do it because you're like, well, I need access to this class somewhere, and I happen to already be in this file. So, why not just hard-code it here? I do think it's a little tricky because the file that you're writing might be, like, very far down in, like, your code flow or, like, your code path, like, very far from, like, a controller or any kind of entry point into your system, at least based on what I've seen in a lot of modern Rails apps. And so, I think that coupling gets really, really obscured. I have found that, like, if I have to kind of write a more, like, a higher level test, like, maybe a request spec or something, there are times when I'm, like, having to deal with a lot of classes just to set stuff up in a test like that that I didn't think I would have to [chuckles] when I first went about trying to just be like, oh, like, let's just figure out how to get a 200 response [laughs] from this request. So, you're really burying perhaps the things that are needed to set up, like, that full path of execution. And sometimes, it only comes out when you're writing a test for it. JOËL: And you mentioned briefly, in passing, the idea that oftentimes this sort of coupling manifests as a lot of extra test setup because your object that you're trying to test now also needs all these other things that are related in order to be tested. But sometimes even when you hard code a class, though, you can't even just say, "Oh, I want this particular user or something returned." So, you have to then do something like allow this class to receive class method and return, and now you're stubbing. And I don't know how you feel about stubs in RSpec. I always treat them a little bit like a code smell in the like classic sense of it's not necessarily bad, but maybe pause, take a look, and ask yourself, "Why is that there, and should I do things differently?" STEPHANIE: Yeah. I ended up having, like, a lot of examples of stubbing in my example because the code had just been set up where that was the only way that you could access those collaborators, essentially, to, like, make an assertion on them, or have them do something different because you actually needed to go into a different path, right? And I was like, yeah, this should feel weird. You should feel a little bad [laughs] or at least, you know, kind of just pay attention to that feeling, even if you can't really do anything about it in that particular instance. But on the flip side, you know, it's like, yes, it feels a bit strange, you know, but it's not all bad, right? Like, you're kind of learning like, oh, hey, like, I am coupled to this hard-coded class because I am needing to stub, like, a class method that returns it, or that constructs it. And at least you've exposed that, you know, for yourself. One thing that I was running into a lot in my example, too, was that those things, like, weren't obvious when you were just reading maybe, like, the public methods and trying to figure out what was happening in them because they were wrapped in private methods. I was a little bit conflicted about this because there were times when it was already just a single method call, but then it was just kind of wrapped in a private method that actually hid [laughs] the things, like all the dependencies that were passed as arguments. And I found that to be, sure, it looks kind of cleaner. But then all you need to do is scroll down [laughs], and then you're like, oh, actually, there's all these other things involved, but it was kind of hidden away for me. And I found that, actually, like, at least when I actually needed to change things, less helpful than I imagine what the, you know, code author intended. Do you have any thoughts about hiding details like that? JOËL: I'm kind of a big fan. STEPHANIE: Hmmm. JOËL: The general idea, I think, is called the single level of abstraction principle. Whatever sort of public method that you're calling is often implemented in terms of...let's say it does a few different things. It's implemented in terms of, like, these sort of high-level concepts. So, whoever is reading the public method doesn't need to like care about the details of how each step is implemented. So, maybe you're fetching something from an API, and then you're making a database call, and then you're doing some transformation and creating some new objects from it. Having all of the, like, HTTP calls and the ActiveRecord stuff and the, like, transformation all in the public method, yes, there's a lot of complexity happening there, and it makes that obvious. But it also makes it really hard to get a sense of what is happening. So, I like to say, "Hey, there are four steps. Let's wrap them all each in a private method then you can call all of those in the public method." The public method now sort of reads like a very simple sort of script. First, fetch data from the HTTP API, then fetch some data from the database, then apply this transformation, then create this object. And if I'm mostly caring about what this object does and not the how let's say I'm building some other objects that interact with this, that is the information I want to know. Where I care about the actual implementation of, oh, well, exactly how is the ActiveRecord stuff done when I'm doing internal changes to the object, that's when I care about those private methods. I think where it gets tricky, and I think that's the point that you were bringing up, is that if you write code in that way, it has to change the heuristics of how you read code to detect complexity. Because, oftentimes, I think a very classic heuristic for code complexity is just line length. If you have a 50-line method, probably there's a lot of complexity there. Maybe there's a lot of coupling. If it's a four-line method that is written at a high level of abstraction that just calls out to private methods, you scan over. You're like, oh, nice and clean. Nothing to see here. Move on. And so, that heuristic doesn't really hold up in a codebase where you're applying this single level of abstraction. Do you think that lines up with your experience? STEPHANIE: Hmm. As I was listening to you, I was like, yeah, like, that makes total sense to me. But then I also clearly disagreed a little bit [laughs] in my initial...kind of what I was saying initially. And I think it's because that single layer of abstraction was not very well defined. JOËL: Hmm. That's fair. STEPHANIE: Yeah. Where, in fact, it was actually misleading. Like, it wanted to be at that level of abstraction, but it really wasn't. Like, it was operating on things at, like, a lower level and wasn't designed with that kind of readability in mind. So, it was more, like, it was just hiding stuff a little bit, at least for me. And, I think, it certainly would have taken, like, more work to figure out what that code, like, really was meant to convey. It might have taken some refactoring to coalesce at that single level. And that was essentially kind of what I was showing in my talk as, like, how to get to saying, like, "Hey, we actually are operating in the lower level, but I don't think we need to." There was some amount of, like, looking at all of the how to figure out, like, oh, maybe these things we don't even need to expose in this class. And we kind of got to a place where those details weren't, like, needed in that class at all. So, it's one of those things where it's harder than it sounds [laughs]. JOËL: It's definitely an art. STEPHANIE: Yeah. JOËL: And I think what you're saying about some of the coupling being, like, scattered throughout the class, it's something that I see a lot with situations where you're coupled, not so much to, like, a single class, but to something side effectful. So, you're building some kind of integration with a third-party API, and you're going to have to make a lot of HTTP calls. And each of those might be individually simple, and they're all sort of maybe in different private methods or whatever, or they're interspersed among a larger chunk of logic. And that makes your tests really complicated. But there's no, like, one place you can point at and be like, ooh, that's the one place where there's a lot of complexity. What's happening here, though, is that your business object that's doing stuff is coupled to the network, and that coupling is going to force you to do some stubbing. It's going to force you to deal with a bunch of side effects that are non-deterministic in your code. And you used the word coalesce earlier that I really liked because I think that's often a situation where you do have to stand back and say, "Look, there's a lot of HTTP going on here. What if I coalesced it all into an object? Now I have two objects: one that's responsible for business logic, and one that's responsible for just the HTTP calls." And, all of a sudden, the tests just totally simplify. And we've removed some coupling, but that's not something that you would have seen just from reading the code. Because, as you were saying, it's sort of scattered in little bits and pieces throughout your file that don't necessarily catch your eye. STEPHANIE: Yeah. Which brings me to a blog post that I had found a lot of inspiration from in the talk that I'll link. It's called "That One Thing: Reduce Coupling for More Scalable and Sustainable Software." But it's actually about tests [laughs], even though it doesn't make an appearance in the title of the blog post at all. But this is where I kind of got the idea of necessary versus unnecessary coupling in test. Because I had never thought about how, yeah, like, when you write a test, you are very correctly coupling yourself to at least the method and class under test [laughs], if not also the arguments, right? Or anything else needed to construct what you're testing. And literally having that listed out for me in this blog post I think it's a...they use some examples in Java. And so, there's, like, a little bit more [laughs] setup involved. But I think they're like, yeah, these are six things that, like, it's mostly fine if you're coupled to these because that's kind of what needs to happen in a test. But, like, even having something to compare a test I wrote to just, like, okay, these are the things I know I need. And then, you can start to see when you've diverged from that list, when you are finding yourself coupled to some internals of your class. I really...that was actually, like, really helpful for me because, as we talked about earlier, like, it can be kind of communicated so abstractly. But here is, like, a very clear heuristic for when you should at least, like, start to pay attention or be like, oh, this is something that was needed to get the test to run but is now starting to feel a little unnecessary because it's not on this list. JOËL: That list reminds me, or the idea of a list of things to check out for when thinking about coupling, reminds me of the concept of connascence, which is a fancy word for almost a, like, categorization of different types of coupling because coupling comes in different flavors, some of which are tighter forms of coupling than others. And so, having that vocabulary has been really helpful for me when I'm looking at PRs and code review, or even when I'm refactoring my own code. Kind of like that list that you mentioned that you have, now I have some heuristics to look at that and say, "Oh, can I go from a connascence of position to a connascence of naming, and does that help me?" STEPHANIE: Yeah, I like that you mentioned the positional connascence because I also came across a really great metaphor for kind of things that need to change together, like, when that makes sense. And it was basically the idea of a dishwasher and a laundry machine [laughs]. I wish I could recall, like, what book this was from. But it was basically like, oh yeah, like, in theory, you're washing two things. So, maybe they are similar, but then you're like, no, actually, you want these to be a little bit separate because, you know, you don't want to wash your dishes and your clothes in the same machine. I don't know, maybe that exists [laughs], but I don't think it would do a very good job for either goal. And I think that was really helpful, for me, in imagining, like, the difference between kind of coupling and cohesion, like things that...even just imagining, like, kind of where I'm doing those things in the house, right? It's like, okay, that lives in a separate room. And, like, the kitchen is for the dishes, and that could be like, you know, a module if you will. And, like, laundry happens in the laundry room, and how to kind of just separate those things, even though they also do share some qualities, too. Like, they're both appliances, right? And so, that's the way that they are similar, but they're not the same. JOËL: You just mentioned the sort of keyword cohesion. And for our listeners who are not familiar with that term, it refers to an object sort of having one thing that it does well. Like, everything in that class sort of works towards the same goal, kind of similar to the idea of the single responsibility principle. So, in my earlier example, where we're sort of interspersing some business logic, a lot of HTTP requests, and pulling out an object that's focused on HTTP, like everything is based around that, now that object has higher cohesion because it's all doing one thing. So, if you read classic object-oriented literature, the recommendations that you'll typically see are that objects should have high cohesion and low coupling. STEPHANIE: Yeah. Think of a dishwasher and a washing machine next time [laughs] you come across something like that. Because I feel like those are really great, like, real-life examples of that separation. JOËL: Did you go to Jared Norman's talk on the third day: "Undervalued: The Most Useful Design Pattern"? STEPHANIE: No, I didn't. Can you tell me about it? JOËL: It felt like he was addressing a lot of the same themes as you were but from more of a code perspective than a test perspective. Talking a lot about, again, forms of coupling, dependencies, and then, specifically, one of the tools that he focused on to reduce the coupling that we see is value objects and factory methods to construct those. So, for any of our listeners who, when the talks come out, watch Stephanie's talk and are like, "Wow, I would love to learn more about this," a great follow-up, Jared Norman's talk: "Undervalued: The Most Useful Design Pattern." STEPHANIE: Yeah, that's neat because I can see that being a solution to the hard code did class names that we were talking about earlier. And I like how that is kind of, like, a progressive lesson in coupling a little bit. I'm really glad you shared that talk with me because now I'm excited to watch it when it comes out. And in general, I just love learning new vocabulary or finding new ways to speak about this topic with clarity. So, if any of our listeners have just additional mental models for coupling [laughs] different metaphors, different household appliances [laughs], or something like that, I would love to know. JOËL: You would like that, given that our first episode together was about "The Value Of Specialized Vocabulary." STEPHANIE: Yeah, it's clearly undervalued. JOËL: Haha, I see what you did there. STEPHANIE: Thank you. Thank you very much [laughs]. JOËL: On that terrible/wonderful pun, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
Joël shares his preparations for his RailsConf talk, which is D&D-themed and centered around a gnome character named Glittersense. Stephanie expresses her delight in creating pod-related puns within thoughtbot's internal team structure, like "cross-podination" for inter-pod meetings and the adorable observation that her pod resembles "three peas in a pod" when using the git co-authored-by feature. Together, Stephanie and Joël discuss bringing one's authentic self to work, balancing personal disclosure with professional boundaries, and fostering psychological safety. They highlight the value of shared interests and personal anecdotes in enhancing team cohesion, especially remotely, and stress the importance of an inclusive culture that respects individual preferences and boundaries. Transcript: We're excited to announce a new workshop series for helping you get that startup idea you have out of your head and into the world. It's called Vision to Value. Over a series of 90-minute working sessions, you'll work with a thoughtbot product strategist and a handful of other founders to start testing your idea in the market and make a plan for building an MVP. Join for all seven of the weekly sessions, or pick and choose the ones that address your biggest challenge right now. Learn more and sign up at tbot.io/visionvalue. STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: So, at the time of this recording, we're recording this the week before RailsConf. I've been working on some of the visuals for my RailsConf talk and leaning on AI to generate some of these. So, my talk is D&D-themed, and it's very narrative-based. We follow the adventures of this gnome named Glittersense throughout the talk as we learn about how to use Turbo to build a D&D character sheet. And so, I wanted the AI to generate images for me. And the problem I've had with a lot of AI-generated images is that you're like, okay, I need a gnome, you know, in a fight doing this, doing that. But then, like, every time, you get, like, totally different images. You're like, "Oh, I need an image where it's this," but then, like, the character is different in all the scenes, and there's no consistency. So, I've been leaning a little bit more into the memory aspect of ChatGPT, where you can sort of tell it, "Look, these are the things. Now, whenever I refer to Glittersense, whenever you draw an image, do it with these characteristics that we've established what the character looks like." Sometimes I'll have, like, a text conversation kind of, like, setting up the physical characteristics. And then, it's like, okay, now every time you draw him, draw him like this, or now every time you draw him, draw him with this particular piece of equipment that we've created. And so, leaning into that memory has allowed me to create a series of images that feel a little bit more consistent in a way that's been really interesting. STEPHANIE: Cool. Yeah, that makes sense because you are telling a story, right? And you need it to have a through line and the imagery be matching as you progress in your presentation. I actually don't know a lot about how that memory works. Does it persist across sessions? Do you have to do it all in one [laughs] go, or how does that work? JOËL: So, there's, like, a persistent chat. So, you can start sort of multiple conversations, but each conversation is its own thread with its own memory. And it will sort of keep track of certain things. And sometimes I'll even say, "Hey..." instead of, like, prompting it for something to get a response, you could prompt it to add things to its memory. So say like, "From now on, when I ask you these types of questions, I want you to respond in this way," or, "From now on, when I ask you to generate an image, I want it done in this format." So, for example, RailsConf requires all of their slides to be 16 by 9. If I want, like, a kind of cover image or, like, something full-screen, I need an image that is 16 by 9. So, one of the things I prompt the AI with is just, "From now on, whenever you generate an image, give me an image in 16:9 aspect ratio." STEPHANIE: Cool. I also was intrigued by your gnome's name, Glittersense. And I was wondering what the story behind that character is. JOËL: The story behind the name is that I was playing D&D with a friend who was this very kind of eclectic Dragonborn character. And I did some sort of valiant deed and got the name Glittersense bestowed upon me by this Dragonborn for having helped him out in some, like, cool way. So, that's a fun name. And so, when I was searching for a name for my character in this talk, I was like, you know what? Let's bring back Glittersense. I like that. I think it captures a little bit of, like, the wonder and the whimsy of a gnome. STEPHANIE: That's really cute. I like that a lot. JOËL: So, Stephanie, what's been new in your world? STEPHANIE: So, lately, I've been having a lot of fun with coming up with names of things. You know the saying how naming is one of the hardest things in software? Well, okay, I'm not actually going to talk about anything that I named very particularly well in my code, but I've been just coming up with a lot of puns. It's just, I don't know, my brain is kind of in that space. And one thing that...I can't recall if I have talked about this on the show before, but our team at thoughtbot is experimenting with kind of smaller sub-teams within it called pods. We have now kind of been split into pods with other people who are working on maybe similar client projects. I have been having some really good naming ideas around [laughs] pod-related puns. So, one thing that we did as part of this experiment was setting up meetings for pods to meet each other, and spend time together, and kind of share what each other was up to. And I was the first to coin the term cross-podination, kind of like cross-pollination. And I think I just, like, said it offhand one day, and then it caught on. And I was very pleasantly surprised to see that people just leaned into it and started naming those meetings cross-podination meetings. And then, another one that came about recently was my pod there's three of us in it, and we were pairing, or I guess it's not really called a pairing if there's three. We were mobbing or ensembling, whatever you want to call it. And sometimes we like to use the git co-authored-by feature where you can attribute, you know, commits to people that you worked on them with. And in GitHub when you, you know, add people's emails to the commit, you know, you see your little GitHub profile picture in a little circle. And when you have multiple people shared on a commit, it is just, like, squished together. And since we're a trio, I was like, "Oh, it's like we're, like, three peas in a pod." JOËL: [chuckles] STEPHANIE: And I realized that it was an excellent missed opportunity for our pod name. We're something else. But I am hereby reserving that name for the next pod that I am in. You heard it here first [laughs]. It looked exactly like just three snug little peas. And I, yeah, it was very cute. I was very delighted. And yeah, that's what's new for me. JOËL: I'll also point out the fact that you are currently talking on a podcast. STEPHANIE: Whoa, whoa. So, you and I are a pod [laughter]. We're a podcasting pod [laughs]. Wow, I didn't even think about that. My world is just pods right now [laughs], folks. JOËL: How do you feel about puns as an art form? STEPHANIE: [laughs] Wow, art form is a strong phrase to use. I don't hate them. I think it depends. Sometimes I will cringe, and other times I'm like, that's great. That's excellent. Yeah, I think it depends. But I guess, clearly, I'm in my pun era, so I've just accepted it. JOËL: Are you the kind of person who is, like, ashamed but secretly proud when you make a really good pun? STEPHANIE: Yeah, that's a very good way to describe it. I'm sure there are other people out there [laughs]. JOËL: What's interesting with puns, right? Like, some people love them, some people hate them. Some people really lean into them, like, that becomes almost, like, part of their personality. We had a former teammate who his...we made a custom Slack emoji with his face, and it was the pun emoji because he always had a good pun ready for any situation. And so, that's sort of a way that I feel like sometimes you get to bring an aspect of your personality or at least a persona to work. What parts of yourself do you like to bring to work? What parts do you like to maybe leave out? STEPHANIE: Yeah, I am really excited about this topic because I feel like it's a little bit evergreen, maybe was kind of a trendy thing to talk about in terms of team culture in the past couple of years, but this idea of bringing an authentic or whole self to work as, like, an ideal. And I don't know that I totally agree with that [laughs] because, like you said, sometimes you have a different kind of persona, or you have a kind of way that you want to present yourself at work. And that doesn't necessarily mean it's a bad thing. I personally like some kind of separation in terms of my work self and my rest of life self [laughs]. Yeah, I just think that should be fine. JOËL: So, you might secretly be the pun master, but you don't want your colleagues to know. STEPHANIE: [laughs] That's true. Or I save my puns only for work [laughter]. If I ever have, like, a shower thought where I think of a really good pun, I will, like, send a Slack message to myself to find [laughs] the perfect opportunity to use this pun in a meeting [laughs]. I don't actually do that, but that would be very funny. JOËL: I feel like there's probably a sense in which nobody is a hundred percent their authentic self or their full self in a work situation, you know, it varies by person. But I'm sure everybody, to a certain extent, has a professional persona that they inhabit during work hours. STEPHANIE: Yeah, and I like that the way we're talking about it, too, is a professional persona doesn't necessarily mean that you're just a little...matching kind of a business speak bot [laughs], where it's kind of devoid of personality, but just using all the right language in their emails [laughs] and the correct business jargon or whatever. To me, what is important is that people are able to choose how they show up or present themselves at work. That's, like, an active choice that they're making, not out of obligation or fear of consequences. You know, like, it's fine to be a little more private at work if that's just how you want to operate. And it's also fine to be more open about sharing things going on in your personal life. Because I've seen ways in which both have been more enforced or, like, there's pressure to perform one way or another. And that could mean, like, when people kind of encourage others to try to be more of themselves or, like, share more things about personal life. That's not always necessarily a good thing if it's not something that people are comfortable with. And I suspect that we have kind of pulled back a little bit from that, but there was certainly a time when that was a bit of an expectation. And I'm not sure that that was quite [chuckles] what we wanted to aim for in terms of just the modern workplace. JOËL: It is interesting because I think there can be some advantages to maybe building connection with people by sharing a little bit more about your life. But, again, if there's pressure to do it, that becomes really unwholesome. STEPHANIE: Yeah. Unwholesome is a good word to use. Like, I want that wholesome content [laughs] at work. And I actually have a couple of thoughts about how I prefer to share, like, just personal things with my team members. And I'm curious kind of where you fall on this as well. But a couple of things that our team does that I really like is we have a quarterly newsletter that one of our team leads puts together. She has an open call for submissions, and people just share any, like travel plans, any professional wins, any kind of personal life things that they want to share. People love talking about their home improvement adventures [laughs] on our team, which is really fun. And yeah, like, just share photos and a little blurb about what they've been up to. And this happens every quarter. And it's always such a delight to remember a little bit like, oh yeah, my co-workers have lives outside of work. But I really like that it's opt-in and also not that frequent, you know? It's kind of like, this is the time to share any like, special things that have happened in the past three months. And yeah, I think every time a new dispatch of it comes out, everyone kind of gets the warm and fuzzy feelings of appreciating their co-workers and what they've been up to. JOËL: Do you think that that kind of sharing sort of maybe helps personalize a little bit of our colleagues, especially because we're all remote and we're interacting with each other through a screen? STEPHANIE: Yes. Yeah. That's another good distinction. I think it is, like, a little more important that there are touch points like these when we are working remote because, yeah, the water cooler conversation just doesn't really happen nearly as much as it does when you're in an office. And I feel like that's the kind of thing that I would talk about at the water cooler [laughs]. It's like, "Oh yeah, I went to Disney World, or traveled for this conference, or I built new garden beds for my yard," just stuff like that. I don't know, I don't find that...like, when you're just communicating over Slack and email, there's not a good place for that kind of stuff. And that's why I really like the newsletter. JOËL: One thing that's interesting about the difference between in-person and remote is that, in person, a way that you can express personality in the office is you can do some things with your workspace. You might have some items on your desk that are of personal interest. And, you know, you might still do that when you're working remote, but those don't get captured by your webcam unless it's in your background. Your background you can get real creative with. But you can also, like, really curate that to, like, show practically nothing. Whereas if you were putting things on your desk in the office, there's kind of no way for your colleagues not to see that. So, you had to be...like, it had to be things that you were willing for everyone to see. But at the same time, sometimes it's nice to be able to say, hey, I'm going to put a touch of, like, things that are meaningful to me in my work life. STEPHANIE: Yeah, I really like that. I mean, Joël, your background is always these framed maps on the wall, hanging on the wall, and that is very you, I think. Did you kind of think about how they'll just be your background whenever you're in a meeting, or they just happened to be there? JOËL: So, these I had set up pre-pandemic. I like the décor. And then, when I started working from home in 2020, I was trying to figure out, like, where do I want to be to take meetings? And I was like, you know what? The math wall is pretty cool. I think that's going to be my background. I guess now it's almost become, like, a bit of a trademark. STEPHANIE: Yeah, I feel that. My trademark...I have a few because I like to move around when I take meetings. So, when I'm at my desk, it's the plants in my office. When I'm in my kitchen, it's either my jars [laughs]. So, I have, like, open shelving and just all of these jars of, you know, some of it is ingredients like nuts, and grains, and stuff like that, and some of it is just empty jars that I use for drinking water. So, I have my jar collection. And then, occasionally, if I'm sitting on the other side of the table [chuckles], all of my pots and pans are hanging in the background from above my stove. So, yeah, I'm the jars, pots, and plants person [laughs] at the company. JOËL: You know, we were talking earlier about the idea that it's harder to see your sort of workspace in a remote world. And I just remembered that we do a semi-regular...there's, like, a thread at thoughtbot where people just share pictures of their workspace, and it's opt-in. You don't have to put anything in there. But you get a little bit of, like, oh, the other side of the camera. That's pretty cool. STEPHANIE: Yeah, I love seeing those threads. And I think a lot of people in our industry are also gear nerds, so [laughter] they love to see people's, like, fancy monitor and keyboard setups, maybe some cool lighting, oh, like, wire organization [laughs]. JOËL: Cable management. STEPHANIE: Yep. Yep. Those are fun. And I actually think another one that we've lost since going remote is laptop stickers because that was such a great way for people to show some personality and things that they love, like programming stuff, maybe, like, you know, language stickers or organizations like thoughtbot stickers, too, and also, more personal stuff if they want. At a previous company, we were also remote, and someone came up with a really fun game where people anonymously submitted pictures of their laptop stickers. And we got together and tried to guess whose laptop belonged to who just based on the stickers. JOËL: Oh, that's fun. STEPHANIE: Yeah, that was really fun. I keep forgetting that I wanted to organize something like that for thoughtbot. But now I'm just thinking about it, and I feel the need to decorate my laptop with some stickers after this [laughs]. JOËL: One thing I do want to highlight, though, is the fact that several years back, when people were talking a lot about the importance of bringing your sort of authentic or whole self to work, one of the really valuable parts of that conversation was giving people the ability to do that, not forcing people to sort of hide parts of themselves, especially if they don't fit into a dominant culture or demographic, in order to be able to even function at work, right? That's a sort of key aspect of, I guess, basic inclusivity. And so, I think that's still a hundred percent true today. We want to build cultures that are inclusive, both in our in-person professional situations and for remote teams. STEPHANIE: Yeah, 100%. I think, for me, what I think is a good measure of that is, you know, how comfortable are people disagreeing at the company kind of in public or sharing an alternative perspective? Like, that should be okay and celebrated, even, and considered, you know, with equal weight as kind of what you're saying, the dominant identity or even just opinion. Like, especially in tech, I think people have very strongly held opinions, and when they're disagreed with...I've become a little skeptical of the idea of, like, this is how we do things here or, like, we don't do that. And I think that rather than sticking to a, like, stance like that, there's always room to incorporate, like, new approaches, new perspectives, new ways of thinking to a given problem. And that can only happen when people are comfortable with going there, you know, and kind of saying, like, "This is important to me," or, like, "This is how I feel about it." And that, in and of itself, is just equally valid [laughs] as whatever is taking the airtime currently. JOËL: That's really interesting because I feel like now you've leaned into almost the idea of psychological safety for a team. And if you're having to sort of repress or hide elements of the way you think, or maybe even sort of core elements of your identity to fit in with a team, that's not psychologically safe, and you can't have those deeper conversations. STEPHANIE: Yeah, 100%. I think it's two sides of the same coin, you know, it's like two ways of saying the same thing, that people should be able to conduct themselves in the way they choose to [laughs]. And I can't imagine anyone really disagreeing with a statement like that. JOËL: So, I know you choose to not always share everything about your life or sort of...I don't want to say bring your authentic self but, like, bring everything about yourself to the workplace. Do you have a sort of a heuristic for what you decide to share or not share? STEPHANIE: Yeah. I don't know if it's necessarily a heuristic so much as it's just what I do [laughs]. But I tend to do better with, like, smaller groups, and, actually, that's why I think pods has been working really well for me personally because I can share personal information just in a more intimate setting, which is helpful for me. And yeah, I tend to, like, find once, like, either Slack channels or Spaces, meetings are starting to get into the, like, 10, 11, 12 people territory is when I hold it back a little bit more, not because of any sort of, like, reason that I don't want to share. It's just, like, that's just not the venue for me. But I do love when other people are, like, open, even in, like, larger spaces like that. I appreciate when other people do it just to, you know, signal that it's okay [laughs]. And I enjoy throwing a reaction or responding in a thread about, you know, something that someone shared in a bigger channel. And I think that diversity is actually really helpful because it conveys that, like, there's different ways of existing online in your work environment and that they're all acceptable. What about you? How do you kind of choose where to share things about your personal life? JOËL: I think, kind of like you, I don't really have a heuristic. I just sort of go with gut feeling. I think I, sort of by nature, have always been maybe a little bit of having, like, separate professional and personal lives and keeping those a little bit more distinct. And, you know, there's some things that kind of cross over, like, oh, you know, I tried out this fun, new restaurant, or I did a cool activity over the weekend, or something like that. I think I've come to see that there can be a lot of value in sharing parts of yourself with other colleagues. And so, from time to time, I'll, like, maybe bring in something a little bit deeper. And, like you said, sometimes that's more easily done in a smaller context. And then yeah, for some things, it's like, okay, I'm going to share photos from a vacation in that, you know, quarterly newsletter. That's kind of fun. But also knowing that there's no pressure that's nice. STEPHANIE: Yeah. I think you're really good about finding the right avenues for that. I like, love when you show photos in the travel channel, even though I have that channel muted [laughs]. You'll, like, send me the link to the post in that channel. And yeah, I love that because it's a way for you to kind of, like, find the right place for it, and then also share it with any particular people if you choose to. JOËL: I think, also, personal connections can be a way to build deeper relationships, especially in smaller groups. And you can form deeper connections with colleagues over a particular project, or a particular technology, or a tech topic, or, you know, just a passion about mechanical keyboards, or something like that. But if you're people who chat kind of more on the regular for different things, maybe separate from a client project you're on or something like that, and you do find yourself exchanging a little bit more about, oh, you know, what you're doing in your life, or what are the things that are going on for you, that often does tend to build, I think, a deeper connection between colleagues, which can be really nice. STEPHANIE: Yeah. And I like that those relationships can also change. Like, there's different seasons in which you're more connected to some people and then less connected. Sometimes a colleague that you have shared interests with becomes someone that you kind of are in touch with more regularly, and then maybe you switch projects, and you aren't so much kind of as up to date. But, I don't know, I always think that there's, like, the right time for that kind of stuff, and it emerges. JOËL: I'm going to throw a bit of a buzzword at you, and I'd love to get your reaction. The idea of belonging, the feeling of belonging on a team, is that a good thing, something that we should seek out? And if so, how much of that is responsibility of, like, management or, like, a property of the team or the group to make you sort of feel that belonging? And how much of that is on you having to maybe disclose things about yourself or share a little bit of your personal life to, like, create that sense of belonging? STEPHANIE: Whoa. Yeah, that is a good way to frame it. I think there's a balance. There've been some, like, periods of my work life where I'm like, oh, I need more of a detachment from work and other times where I'm like, oh, I feel really disconnected, like, I want to feel like more of a part of this team. But I do think it's a management responsibility. And one thing that I know people to be cautious of is, you know, becoming too close at work. I don't know if your work being treated like a family, like, that kind of language can be a little bit borderline. JOËL: Almost manipulative. STEPHANIE: Right. Yeah, exactly. I do think there's something to be said about community at work and feeling like that kind of belonging, right? But also, that you can choose how much, like, you want to engage with that community and that being okay. I don't think it necessarily needs to be only through what you share about yourself. Like, you can have that sense of connection just by being a good colleague [chuckles], right? Like, even if the things you talk about are just within the realm of the project you're working on, like, there's still a sense of commitment and, yeah, in that relationship. And I think that is what matters when it comes to belonging. In the past, ways that I've seen that work well in regards to kind of how you share information is just, like, I don't know, share how you're doing. Like, you don't have to provide too many details. But it could be like, "Oh, I'm kind of distracted in my personal life right now, and that's why I wasn't able to get this done." People should be understanding of that, even if you don't kind of let them in on the more personal aspects of it. JOËL: Right. And you don't have to give any details, right? STEPHANIE: Yeah. JOËL: You should be in a place where people are comfortable with not knowing and not be like, "Ooh, what's going on with Stephanie's life? " STEPHANIE: [laughs] Yeah. But I do also think, like, the knowing that, like, something is going on is, like, also important context, right? Because you don't necessarily want that to impact the commitments you do have at work. JOËL: Right. And people tend to be a little bit more understanding if you're having to maybe shift some meetings around, or if you're struggling to focus on a particular day, or something like that. STEPHANIE: Yeah. 100%. JOËL: Yeah, we should normalize it of just like, "Hey, I'm having a hard day. I don't want to give details, but you know." STEPHANIE: Yeah. Yeah. I think a way that that is always kind of weird is how people communicate they're taking a sick day [laughs]. I actually had someone tell me that they really appreciated a time when I just said, "You know, I need to take care of myself today," and didn't really say anything else [laughs] about why. Because they're like, "Oh, like, that helped normalize this idea that, like, that is fine just kind of as is." There's no need to, you know, supply any additional reasoning. JOËL: Sometimes I feel like people almost feel the need to like, justify taking sick time. So, you've got to, like, say just how bad things are that now I'm actually taking sick time. STEPHANIE: Yeah, which is...that's not the point, right? You know, we have it because we need it [laughs]. So, yeah, I'm glad you mentioned that because I think that's actually a really good example of the ways that people, like, approach kind of bringing themselves to work like that. JOËL: Yeah, sometimes it's setting a boundary. An aspect I'm curious to look at is you, and I do a little bit of this with this podcast, right? Every week, we share a little bit of what's new in our world, and it goes out into the public internet. How do you tend to pick those topics and, like, how personal are you willing to get? STEPHANIE: Yeah. Oh, that's so hard. It's always hard [laughs], I think. I generally am pretty open. You know, I have talked about plans that I have for moving. I don't know, things about my gardening. I think I've also been a little vulnerable on the show before when I've, like, had a challenge, like, at work. But yeah, it's important, to me, I think, to be, like, true. Like, I think part of what our listeners like about this show is that we show up every week, and it's just a chat between two friends [laughs]. JOËL: Uh-huh. STEPHANIE: It also is kind of weird to know that it's just, like, out there, right? And I don't really know who's listening on the other side. I do know that, like, a lot of my friends listen. And, in some ways, I like to think that I'm talking to them, right? But yeah, sometimes I think about just, like, in a decade [laughs], it will still be out there. And on one hand, I think maybe it's kind of cool because I can listen back and be like, oh, like, that's what was going on for me in 2024. And other times I'm like, oh my God, what if I'm one day just, like, deeply embarrassed by things I've talked about on this show [laughs]? But that's a risk, I guess, I'm willing to take because I do think that the sense of connection that we foster with our audience is really meaningful. And it gives me a lot of joy whenever I meet a listener who's like, "Oh, you, you know, talked about this one thing, and I really related to it." And yeah, I guess that's what I do this for. What about you? JOËL: Yeah, I think kind of similar to you; tend to talk about things at work, interesting technical challenges, interesting sort of work, or even sometimes client-related challenges. Of course, you know, never calling out any clients by name, you know, talk about some hobbies and things like that. I think where I tend to draw the line a little bit is things that are a little bit more people-oriented in my personal life. So, I tend to not talk about family, and friends, and relationships, and things like that. And, you know, there are some times where there's like, those things intermix a little bit, where I'll, like, have shared, like, "This is what's new in my world." And then, like, off air, I'll follow up with you and say, "So, I didn't tell the whole story on air. STEPHANIE: [laughs] Yeah. JOËL: Here's what actually happened." Or, you know, "Here's this extra anecdote that I wanted you to know, but I didn't want everyone in the audience to hear." STEPHANIE: Yeah. I think the weirdest part for me, too, is I certainly have my, like, parasocial relationships with people that I follow on the internet [laughs], like, people on YouTube, or other podcasts, and stuff like that. But I haven't thought a whole lot about just, like, what that looks like for me as a host of a podcast. I think, kind of the size of the show now it feels right for me, where it's like I run into people who listen at conferences and stuff like that, but it is kind of contained to a work-related thing. So, that feels good because it, I think, for me, helps just give the work stuff a little bit of a deeper meaning, but otherwise isn't spilling over to my regular life. JOËL: And it's always fun when, you know, we get a listener email connecting to, you know, one of the random hobbies or something we've talked about and sharing a little bit of their experiences. I think last spring, I talked about getting a pair of bike shorts and, like, trying it out and seeing how that worked. And a listener called in and shared their experience with bike shorts, and, like, that's a lot of fun. It kind of creates that connection. So, I do enjoy that aspect. STEPHANIE: Yeah. And just to plug, you can write in to us at hosts@bikeshed.fm, and if you have anything you want to share that was inspired by what you heard us talk about on the show. JOËL: We'd love to have you. STEPHANIE: On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
Stephanie is back with a book recommendation: "Thinking in Systems" by Donella Meadows. This book has helped to bolster her understanding of complex systems in environmental, organizational, and software contexts, particularly through user interactions and system changes. Joël describes his transformative experience watching last week's total solar eclipse. Together, they explore how systems thinking influences software development and team dynamics by delving into practical applications in writing and reading code, suggesting that understanding complex systems can aid developers in navigating and optimizing codebases and team interactions. Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn, and together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: I have a book recommendation today [laughs]. JOËL: Oh, I love book recommendations. STEPHANIE: It's been a little while, so I wanted to share what I've been reading that I think might be interesting to this audience. I'm reading Thinking in Systems by Donella Meadows. Joël, are you familiar with systems thinking theory at all? JOËL: Very superficially. Hearing people talk about it on, I guess, X, now Twitter. STEPHANIE: Yeah. Well, what I like about this book is the subtitle is A Primer on Thinking in Systems [chuckles], which is perfect for me as someone who also just kind of understood it very loosely, as just like, oh, like, I dunno, you look at things holistically and look at the stuff, not just its parts but from a higher perspective. JOËL: Yeah. Is that accurate sort of your pre-book reading overview? Or do you think there's a bigger thing, a bigger idea there that the book unpacks? STEPHANIE: Yeah. I think I'm only, like, a third of the way through so far. But what I have enjoyed about it is that, you know, in some ways, like, intuitively, that makes a lot of sense about, like, oh yeah, you want to make sure that you see the forest for the trees, right? But one thing I've been surprised by is how it's also teaching me more technical language to talk about complex systems. And, in this case, she is talking about, essentially, living systems or systems that change over time where things are happening. I think that can be a little bit confusing when we also are, you know, talking about computer systems, but, in this case, you know, systems like environments, or communities, or even, you know, companies or organizations, which is actually where I'm finding a lot of the content really valuable. But some of the language that I've learned that I am now trying to integrate a little bit more into how I view a lot of just, like, daily problems or experiences involve things like feedback loops that might be reinforcing or balancing and different, like, inputs and output flows and what is driving those things. So, I've appreciated just having more precise language for things that I think I kind of intuited but didn't exactly know how to, like, wrap up in a way to communicate to someone. JOËL: Do you think the idea of thinking in terms of things like self-balancing versus sort of diverging input loops is something that's useful when actually writing code? Or do you think of it a little bit more in terms of, like, teams and how they organize general problem-solving approaches, things like that? STEPHANIE: I think the answer is both. I actually gave this quite a bit of thought because I was trying to wrap my head around her definition of a system and how we talk about systems sometimes, like, a codebase, for example. And the conclusion I came to is that, really, it's not just the code static by itself that we care about. It's how it gets exercised, how users use it, how developers change it, how we interact with it when we, like, run tests, for example. So, that was really helpful in kind of thinking about some of the problems we see in engineering organizations as a result of software being a thing that is used and written by humans, as opposed to it just existing in memories [chuckles] or, like, it's in a storage system somewhere. Like, that means it's kind of lifeless, and it's not changing anymore. But the point of kind of this framework is trying to understand it as it changes. JOËL: So, kind of that blurry line between humans and computers and where those two overlap is where a lot of that systems thinking almost, like, mental model or vocabulary has been most helpful for you. STEPHANIE: Yeah, I would say so. So, Joël, what's new in your world? JOËL: So, I did the thing. I traveled to see the total solar eclipse this past weekend. It was mind-blowing. It was incredibly cool. I really loved it. For any of our listeners who have never seen a solar eclipse, in the coming years, have an opportunity to see one. I'd say it's worth traveling to see because it is really impressive. STEPHANIE: Cool. What did it look like when it happened, when it was 100% eclipsed? JOËL: So, what really impressed me was the fact that, like, most of the cool stuff happens in that, like, last half a percent. So, like, 95% eclipsed, still not that impressive. If that's all I'd seen, I would be disappointed. And then, in that last little bit, all of a sudden, everything goes dark. It's sort of, like, that twilight past sunset. You've got a glow on the horizon. The stars are out. STEPHANIE: Wow. JOËL: The animals are behaving like it's past sunset. They're getting ready to go to sleep. STEPHANIE: Whoa. JOËL: The sun itself is just a black dot with this, like, big fiery ring around it. Like all those pictures, icons, photos you see online, or drawings that look over the top, those things are real. That's what it looks like. STEPHANIE: Wow, that's really neat. Could you see it without looking through the eclipse viewers? JOËL: So, when you hit totality, you can look at it with a naked eye, and it is, yeah, magnificent. STEPHANIE: Oh, that's so cool. How long did it last? JOËL: So, it depends where you are in the path of totality. I was pretty much dead center. And it lasts, I think, three and a half minutes is what we had. STEPHANIE: That's so cool. So, for me, here in Chicago, we did not have complete totality. It was about, like, 95%. So, I was watching it, just from that perspective. And I would say, yeah, it was not nearly as cool as what you described. It kind of just was like, oh, it got dark. It almost looked like I was viewing the world through sunglasses. I did have one of those viewers that I used to, like, look at the sun and see how much of it had been covered. But yeah, it was cool. But what you said, I think now I feel like, wow, I really should have [laughter] traveled. I could have traveled just a few hours, you know, to, like, Indianapolis or something to have been on the path. That would have been really neat. And I don't think the next one will be until 2044 or something like that. JOËL: Yeah. And that's the thing, right? I think if you're within a few hours of the path of a total eclipse, it is absolutely worth traveling to totality. The downside of that is that everybody else has the same idea. And so, you will be fighting traffic and a lot of things, especially if it goes through some, like, populated areas, like it did this time. STEPHANIE: Yeah. Well, that's really neat that you got to see that. That's, I don't know, it sounds like not exactly once in a lifetime, but definitely very rare. JOËL: For sure. I think with this experience now; I would definitely consider traveling again if there's one, like, anywhere near where I live, or, you know, maybe even, like, planning a vacation around going somewhere else to see one because it's short. You know, you're there for three minutes, and you see something cool. But that was really impressive. So, something that really struck me when you were talking earlier about systems thinking is that you mentioned that it gave you a sort of a new vocabulary to talk about things. It almost gave you a sort of different way of thinking or some other mental models that you could use to apply when you are interacting in that sort of fussy boundary between people and code. And I think that this idea of having language and having mental models is something that is incredibly valuable for us as programmers in a few different areas. And I'd be curious to see particularly for when we're reading other code, reading code that someone else has written or, you know, yourself from six months ago, do you have any sort of mental models that you like to reach for or techniques that you like to use to sort of give yourself that almost vocabulary to understand what somebody else is trying to do with their code? STEPHANIE: Yeah, I would say so. You know, as you were talking about, like, how do you read code? I was thinking about how I read code is different from how I would read a book [laughs]. I almost rarely just read everything line by line and, like, file by file, you know, in some order that has been presented to me. I am usually a lot more involved. It's almost, like, more like a choose your own adventure kind of book [chuckles], where it's like, oh, go to this page to check if you want to check out what happened down this code path [chuckles]. JOËL: Right, right. Oh, if you're reading a novel, are you the kind of person that will read the ending first? STEPHANIE: Absolutely not. [laughter] JOËL: You have strong opinions here. STEPHANIE: Even when I, like, really want to... okay, sometimes I will, like, maybe just kind of flip to the back and just see, like, oh, how many more pages or chapters do I have [laughs] left? If I am itching to know what might happen. But I definitely don't start a book by reading the end. I think there are people who do that, and maybe that works for them, but I don't understand it. [laughter] JOËL: But maybe that's the thing that you do with your code. STEPHANIE: Yeah. When I read code, it's almost always with some kind of intention to understand a particular behavior, usually kind of kicked off by some action, like, done by the user or something automated. And I want to understand that process from start to finish. So, I'm less likely to read a whole class file [chuckles], as opposed to just following method and the messages that are sent along the way in a process. JOËL: That makes sense. Do you tend to sort of go from kind of the origin point and then follow it down, or sort of the opposite, find some, like, terminal node and then work your way back? STEPHANIE: Oh. JOËL: And I could imagine this in a more concrete sense in a Rails app. You find, like, the route that you're going to hit because you know it's a URL, and then you find the controller, and then you read through the action. And then, you maybe follow a service and something like that or look into the view. Or maybe the opposite: there's a particular page that gets rendered. You look at a method, a helper method that gets called in a view, and then you sort of, like, follow a backtrace from there. STEPHANIE: Yeah, I think both. It depends on what information I have available to me, I think. I can think of, recently, I was trying to figure out the process for which, like, a user in this application I'm working on can downgrade the tier of their account, and I didn't know what to grep for. And so, I asked, like, "Hey, like, what are the entry points for a user being able to do this?" And someone gave me a couple of routes, and that was great because then I got to see, oh, that this is possible in multiple ways. Like, the user can do it themselves, or the admin can do it, and that was really helpful. Other times, I think I have been able to find a keyword on a page and start from, like, a view or a component, or something like that, and then work upwards. JOËL: I love that question that you asked, "What are the entry points for this thing?" I feel like that's a fantastic question to sort of ask yourself when you're feeling stuck, but it's also a great question to ask other people that might know. Do you find that you read code differently when you're just trying to, like, maybe understand a broader subsystem? Maybe you're sort of new to this area and you have to add a feature, as opposed to maybe you're debugging something and trying to understand why things went wrong. Are those two different kinds of reading? STEPHANIE: Yeah, that's also a great point because I do think there's another time when I've just scanned the file structure of an app and looked at the model's directory and just kind of been like, okay, like, maybe some things are namespaced. And that helps me just know what the main concepts that I have to be dealing with or that I will be dealing with are. But I find that sometimes less fruitful because of kind of what I mentioned earlier about thinking in systems, where I'm not sure how important those things will be yet because I don't know how they're used. They could not be used at all [laughs]. And then, I think I'm potentially, like, storing information that is not actually relevant in my brain. JOËL: That's tough, right? Because systems are so big, we can't hold them entirely in our brain. So, sometimes, selectively deciding what will not be loaded in there is just as important as what will. STEPHANIE: Yes. And I think that is actually advice that I would give to devs who are trying to get better at reading code. And this one's hard because when I am working with more early-career developers, it's hard to figure out, like, what are they seeing? How are they interpreting the code on the page? Because oftentimes, I see that they are getting stuck on the details, whereas I would like to encourage them to just be like, you don't really need to know what's going on in that method right now. Does the method name kind of communicate enough to you, like, what this thing is doing without having to understand all of the details? But my advice would be to start figuring out what to ignore [laughs] because, like you said, it's impossible to, like, hold all of that information at one time. What do you think about that advice and, like, how do you teach that to someone? JOËL: I think you're sort of hinting at two different ways of reducing the amount you have to load in your mind. The way I think about it, I think of it sort of spatially, so you can reduce the breadth of things you have to load into your head, so, realize, wait, there's all of these methods, and I don't need to know all of the methods in the file. There's only this one entry point I care about and everything downstream of that, and you just sort of prune everything off to the side, ignore it. That's not relevant right now. But there's also sort of a depth. How deep of implementation do you really need to have? Maybe you only need to know about the high-level concepts. And then, you sort of, like, do this pruning where you say, "I'm not going to go deeper than this level," because the implementation is not really relevant to what I'm trying to understand right now. I mostly need to know what are these classes and how do they interact with each other? Or something along those lines. And, ideally, you're may be doing a little bit of both. You probably don't need to go all the way to the deep implementation of every method, but you also don't necessarily need to know all of the high-level concepts and all of the objects in the system that interact. So, being able to prune in sort of both dimensions, breadth and depth, helps you to, I think, narrow the window of what you need to learn. STEPHANIE: Yeah, that's a really great point. I have a couple more strategies that I just thought about as you were talking about that. One is kind of on the journey to let go of some things that I can't understand in the moment. If they seem important, I will write them down and, like, put them somewhere in a list to come back to later and be like, "This is a thing I don't fully understand yet," and just be okay with that. I think, for me, there is some anxiety of like, oh, like, what if I'll need to know about it later? And at least putting it down somewhere as like, okay, like, I've done something with that anxious [laughs] energy of, like, recognizing that I don't understand this right now, and that's okay. But I can revisit it later. And then, another one is almost the opposite, where it's like, what are my landmarks as I'm navigating through a codebase? Like, what are the files that I'm consistently opening? Because so many of the roads lead to this object. Even when I'm kind of going through different paths, it's like, I can hook into, like, the behavior that I'm looking for from these landmark objects or models because they are really important in this domain. So, it's like, I don't necessarily need to remember every step of the way, but if I can recall some of the more important methods, then I can kind of find my way back. JOËL: Do you just try to, like, memorize those, or do you write them down? Like, how do you make a method or an object a landmark for you? STEPHANIE: That has felt a little more, like, it becomes more, like, muscle memory, I think, because I'm revisiting them pretty frequently. I don't know, it's somehow the act of repeating, like, going through those files just gets encoded somewhere in my brain [laughs], and I don't have to worry as much about forgetting them. JOËL: Strengthening that neural pathway. STEPHANIE: Yeah, exactly. JOËL: Or whatever is happening in the brain there. STEPHANIE: [laughs] JOËL: I like what you were saying earlier, though, about taking notes and sort of almost, like, a breadcrumbs approach. We did an episode almost two years ago where we talked about note-taking for various purposes and note-taking as an exploration exercise, and then note-taking when debugging, where we went deeper into that topic. And I think that would be really relevant to any of our listeners. We'll link that in the show notes. STEPHANIE: Yeah. Leaving breadcrumbs. That's a great metaphor or just a way to describe it. Because I have a little shorthand for if I am leaving myself notes in a codebase as I'm trying to understand what's happening, and it's just, like, putting my initials in a comment and, like, including some observation or commentary about what I'm seeing or a question. JOËL: Also, just a kind of meta observation here, but in the last, you know, 10-15 minutes we've been talking about this, we're already creating our own set of metaphors, and language, and mental models around understanding code. We're talking about breadcrumbs, and landmarks, and looking at code through a broad versus deep lens. That's exactly what we're talking about. STEPHANIE: Joël, do you have any mental models that you use that we haven't really gotten into yet? JOËL: I don't know if they're mental models per se, but I lean very heavily into diagramming as a form of understanding code. And maybe that's a way of sort of reducing the number of concepts because instead of now sort of thinking in terms of, like, lines of code, I'm thinking in terms of maybe some boxes and arrows, and that's a much higher-level way of looking at a system and can give me some really interesting insights. And there are a ton of different diagrams you can use for different things, and I guess all of them are based on a different maybe mental model of what a system is. So, for example, I might actually write out the method call graph starting from some endpoint and just sort of saying, "Hey, when I call this method, what are all of the methods downstream that get called? And is there anything interesting at any of those steps?" Variation on that if you're looking at, let's say, some kind of performance thing would be, like, a flame graph where you have sort of that but then it also shows you the amount of time spent in each of the methods. And that can give you a sense of where your bottlenecks are. Another one that I really like is thinking in terms of a finite state machine. So, sort of following data, how does it change in response to different events that can come into the system? And I'm not talking about, oh, you're using one of the, like, state machine gems out there for your Rails app. This is more of a way of thinking about programs and how they act. You can have just a plain, old Rails app, and you're thinking about, okay, well, how does a cart turn into an order, turn into a fulfillment request at the warehouse, turns into a tracking number for shipping? Modeling that as a state machine. And also, you know, can it move back along that path, or is it only linear move forward? Any kind of multi-state form a wizard often has paths where you move back. It's not linear. That very easily can be drawn out as a state machine. So, that is something that I really like to pull out when I'm trying to understand a, like, complex workflow. STEPHANIE: Yeah, I think we've talked about this before a little bit, or maybe not even a little bit, a lot [laughs]. But I know that you're a big fan of Mermaid.js for creating diagrams in markdown that can be embedded in a pull request description or even in a commit message. When I was hearing you talk about state machines and just all the different paths that can lead to different states, I was like, I bet that's something that you would create using a diagram and stick for yourself and others when sharing code. JOËL: Yes, Mermaid does support state machines as a graph type, which is really cool. Another thing that you can do is embed those in tools like Obsidian, which is my current note-taking tool. So, if I'm doing some sort of notes as a sort of exploratory tool, I will often start writing a Mermaid graph directly in line, and it will render and everything. That's really nice. If I'm not in Obsidian and I just need some sort of one-off graph, I'll often lean on Mermaid.live, which just gives you an editor where you can write up some Mermaid code. It will render it, and then you can copy the PNG into somewhere else and share that with other people. So, if I just need a one-off thing to share in Slack or something like that, I like to lean on that. Another type of diagram that I use pretty frequently is an entity-relationship diagram, so sort of what database tables are related to what others. On larger apps, there's just so many tables, and maybe a bunch of JOINS and things like that, and it's sometimes difficult to get the picture of what is happening, so I'll often draw out a graph of those. Now, it's not worth doing the entire database because that will be huge and overwhelming. So, I'll find, like, five or six tables that are relevant to me and then try to answer the question: How are they related to each other? STEPHANIE: Yeah, I like that. I was going to ask if you do it manually or if you use a tool because I've worked in various apps that have used the Rails ERD gem that will generate an entity-relationship diagram for you every time the schema changes. But there's something very compelling, to me, about the idea of trying to just figure out if you know the relationships, if you could draw them out, as opposed to having a tool do it for you. JOËL: Exactly. STEPHANIE: And I think, like, also, you do have information that might not be encoded in the system. Like, you actually know, oh, these two tables are related, even if no one has defined an association on them. I think that is important in understanding actually how the system is working in real life, I guess. JOËL: Agreed. So, we've been talking a lot about how we can use different tools, different mental models to take code that somebody else has written and kind of, like, almost read it from disk and load it into our brains. But what about the opposite? We're faced with a business problem, and we want to sort of write it to disk, turn it into code that somebody else will then read or that a machine will execute. I hear that happens occasionally. Are there sort of mental models or ways of approaching tackling a more, like, amorphous problem in the real world and turning that into code? Like, are they just the inverse of what we do when we read code, or are they, like, totally different set of skills? STEPHANIE: For me personally, I don't follow this framework very strictly, but I think more intuitively how I like to go about it is more behavior-driven where...because that is the language of maybe our cross-functional partners. They're saying like, "Hey, like, when this happens, I want to be able to do this," and I kind of start there. Maybe I'll pick up some of the keywords that they're repeating pretty frequently as like, oh, like, this is a concept. Actually, lately, the past couple of weeks, I've been test-driving almost all of my code as I work on a totally, like, greenfield feature. And that has been working really well for me, I think, because we did explore more granular, both, like, granular and abstract concepts when we were spiking this feature. And so, we had come up with some domain models. I had kind of thought about, like, how they might interact with each other. But when you then have to actually, like, code that, there are so many little nuances and things to keep track of that I found test driving things from, like, behavior and user stories. Those are really helpful in keeping me, like, on track to making sure that I didn't just have all these little pieces of domain concepts that then didn't really interact in a meaningful way. JOËL: Yeah, the sort of very, like, user or customer-centric approach to thinking about what is this app doing? Is a great way to think about it. And I guess the sort of translation of that, that first step of translation into code is some sort of, like, system spec. STEPHANIE: Yeah, exactly. JOËL: I like that because, you know, we have all these other abstractions that we use as developers. But at the end of the day, our customers and even, you know, our product people aren't thinking in terms of, like, objects and classes and all these other fun abstractions that we have. They're thinking in terms of behaviors and, you know, maybe subsystems, workflows, things like that. And then it's up to us to translate that into whatever paradigm of our language that we're using. STEPHANIE: Do you do things differently from me? JOËL: I don't think that I do it necessarily differently. I think it's one of several tools I have in my tool belt. Something that is similar but from a slightly different angle is inspiring myself with a lot of the ideas from domain-driven design. You know, we've been talking a lot about this idea of, like, mental models and having a vocabulary, things like that, about sort of the way that we work, but that exists at the product level as well. And what if we could encode a lot of that into our application itself? So, is there a distinction between a subscriber and a payer in our system? Is there specialized vocabulary around different other concepts in the app? Maybe instead of just having those be things that product people talk about, what if we made them actual named entities in the system and have maybe our object graph, at least in some way, reflect the sort of idealized model of what our business actually does? That often means that you're thinking of things at a higher level because you're thinking of things at the level that our product people are thinking about them. You might be thinking of things in terms of user journeys, or product workflows, or things like that, because you say, "Oh, well, a new payer has been added to this group account. And that has started a subscription, which then means that a user has access to these corporate features that they didn't have when they were in a solo account." Like, I've just thrown ten different sort of product terms out there that, you know, if there are concepts in our code can help us think about less of the implementation. What does the app do, or how does the app do it? And more in terms of, like, product terms, what does the app do? How do people experience the behavior, or maybe how does data change over the life cycle of the app? So, those perspectives, I think, have helped me distill down sort of more vague product ideas into things that I can then start turning into code. STEPHANIE: Absolutely. I think one way that this framework ends up falling short, at least for me a little bit sometimes, is making connections between behaviors that are similar but not exactly the same. Or when you think about them in more isolated ways, like, it's easy to miss that, like, they are the same idea and that there is, like, something a bit higher level that you can connect them, that you can create a more abstract class for, even though that's not actually how people talk about the things. One example I can think of is things like concerns that are both related to domain language but then also, like, kind of specific to how things work in the code as a system because you might not necessarily call something a subscribable from a product perspective. Do you have any thoughts about identifying those pieces? JOËL: So, what's interesting is I think there's a little bit of, like, layers above and below, the sort of domain layer where you're talking in terms of, like, what the product team would use. When you're doing a lot of the implementation, there will be things that are just, like, that's how we implemented them. They're in the nitty gritty, and they're not terms that the product team would necessarily use. Things like array and string they're low-level details. We have to use them. That's not really relevant to the world of payers, and subscribers, and things like that. So, they're sort of lower layer. And I think that's totally fine to have things where we sort of have things that are sort of programmer only, as long as they're sort of contained within this higher-level layer because that allows people new to the app to sort of see what are the different things in the application to think about things in a higher level. It also allows for smoother communication with the product team. So, ideally, you don't have a concept in the app that is the same as something that the product team, but you just both gave it different names, and then that's really annoying. Or maybe the dev team created something that's, like, almost exactly the same as what the product team talks about, but with some, like, slight variations. Now, you're just going to be talking past each other in every planning meeting, and that will be incredibly annoying. STEPHANIE: Yeah. At one point, when I was trying to communicate, like, async about how a feature works, and there was like the product word for it and then the dev word for it, I would have to type out both [chuckles] because I wanted to make sure that no one was confused about what we were talking about, which was the same thing that just had two names. And yeah, I don't know how many seconds of my life I'll never get back as a result [chuckles]. JOËL: Were these concepts that were identical and had just different names, or was this like, oh, well, our internal subscribed user is almost the same as when product talks about and, I don't know, employee, but our subscribed user has a couple of other extra behaviors that employees don't have, and now there's, like, this weird, like, overlap? STEPHANIE: Yeah, both situations I have found myself in, but I think this one they were virtually identical. Like, they could be used interchangeably to mean the same thing by people who understand both of those definitions, but the problem was that we still had two words [laughs]. JOËL: Yeah, yeah. I'm a big fan of, where possible, converging on the product team's definition. Although because code forces you to be more precise, sometimes that can then force some conversations with the product team about, like, "Hey, so we've been hand waving around this concept of a subscriber. Turns out we think there's actually two different kinds of concepts at work here: the person who's consuming the content and the person who's paying for it. And are they really the same thing, or should we sort of think about these as two different entities? And, in that case, what should the name be?" And that can force a really, I think, healthy conversation between development and product. STEPHANIE: Yeah, I like that. You mentioned there was, like, a higher level and a lower level, but I don't think we've gotten to the higher one yet. JOËL: Yeah. Sometimes, you want to build abstraction sort of over. You're talking about the idea of, like, subscribable things. I think that's where I'm a lot fuzzier. It's much more case-by-case. Where possible, I'd like to introduce some of those things as domain vocabulary so that we'd say, "Well, look, we have a, like, family of products, and they're all subscribable." And maybe, like, the adjective doesn't matter quite as much to our product people, but, you know, because we're using a module in Ruby, we want to lean into the adjective form, and that's fine. But I would at least want some loose connection there. STEPHANIE: Yeah, that makes sense because I think that ultimately makes for a better product. If we're thinking about, like, how to present a hierarchy of information to a user, like a navigation menu, we would want to group those things that are under that family together, ideally, so that they know how to interact with it. JOËL: Another thing that I think falls maybe under, like, this higher-level umbrella are things like design patterns. So, maybe because we want to be able to sort of, like, swap things in and out, we're using some form of strategy pattern. That feels like maybe it's a little bit higher level. It interacts with a lot of the domain concepts, but our product team doesn't really need to think in terms of, like, oh, strategies, and swappable things, and, like, flex points in your architecture. So, those would not necessarily be domain vocabulary. Although I could see, like, maybe there's a way where they do get a domain name, and that's great. STEPHANIE: Oh, I think maybe this is where I disagree with you a little bit. Well, actually, I agreed with what you said at the end [laughs] in terms of how maybe they should be part of the domain vocabulary because I think...I've seen product not fully understand the complexity of the application as it grows over time. And that can lead to sometimes, like, not as great product experience or experience for the user, like, interacting with this product. And maybe that is something we want to, as developers, if we're starting to see and feel and have maybe even introduced a pattern for...I can't claim to have done this too much, but it's definitely a skill I want to hone in on. But, like, how do I communicate to product folks so that we understand, oh, like, where is it possible for these different types of a subscriber to diverge? Because that is important, I think, in determining the future of a product and, like, where we want to invest in it and where we should focus, like, new features. JOËL: And oftentimes, when there is that kind of divergence, there probably will be some sort of product-level thinking that needs to happen there. Are we saying, "Hey, we have one of three types of subscribers, and we want to think about that"? Or maybe we want to say, "We have three different ways of processing an application." Maybe it's derived automatically. Maybe it's a dropdown that you have to pick. But let's say it's a dropdown. What do we name that dropdown with the, like, kind of processing that we want to do to an application? The thing that we want to name that dropdown that's probably a good name for that, like, group of strategies, assuming we implement with a strategy pattern. Maybe we're doing it differently. STEPHANIE: Yeah. The more you talk about that, the more I'm convinced that that's, like, the way I want to be working at least, because you have to know what's there in order to, like, name it. You know, you have to face it, essentially [laughs]. Whereas I think a lot of applications I've worked on fall into the trap of all of those things are obscured way down in the depths of the user flow, where it's like, oh, suddenly, for some reason, you can, like, have a dropdown here that totally changes the behavior, even though you've gotten this far in either the stack trace or even just, like the user journey, as I know you like to branch early in your code. JOËL: [laughs]. STEPHANIE: But you should also branch early from a user's experience [laughs]. JOËL: In general, I'm just a big fan of having a communication loop between development and product, not only sort of receiving a lot of useful information from the product team about what we want to build. But then because we're encountering this more, like, technical spec that we're writing, have those conversations bubble back to product and say, "Hey, so we talked about a dropdown where there are sort of three different ways of processing an application. Let's talk a little bit more about what it means to have three different ways of processing. And what do we want to name that? Is that accessible to everyone, or are they sort of one-to-one tied with a type of user?" And all of a sudden, that has just generated probably a lot of questions that product never even thought to ask because they're working on an infinite canvas of possibilities. And it's really helped you as a developer to have better names to write your code and sort of better sketch out the boundaries of the problem you're trying to solve. So, I think it's a really healthy loop to have. I strongly encourage it. So, we've spent a lot of time talking about thinking about behavior and things like the domain-driven design movement. But a few other things I want to shout out as being really helpful, one is an exercise where you take a problem statement and just underline all of the nouns. That is a great way to get a sense of, like, what is going on here. More generally, I think a lot of what we're talking about falls under the umbrella of what you might call analysis. And so, digging into different analytic techniques can be a great way to better understand the problem that you're working through. One such tool would be decision tables. So, you have a problem, and you say, "Well, given these inputs, what should the outputs be?" STEPHANIE: Cool. If there were any techniques or tools that we missed in terms of how you load code in your brain or generate code from your brain [laughs], we would love to know. You can write in to us at hosts@bikeshed.fm. JOËL: On that note, shall we wrap up? STEPHANIE: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
Joël conducted a thoughtbot mini-workshop on query plans, which Stephanie found highly effective due to its interactive format. They then discuss the broader value of interactive workshops over traditional talks for deeper learning. Addressing listener questions, Stephanie and Joël explore the strategic use of if and else in programming for clearer code, the importance of thorough documentation in identifying bugs, and the use of Postgres' EXPLAIN ANALYZE, highlighting the need for environment-specific considerations in query optimization. Episode mentioning query plans (https://bikeshed.thoughtbot.com/418) Query plan visualizer (https://explain.dalibo.com/) RailsConf 2024 (https://railsconf.org/) Episode 349: Unpopular Opinions (https://bikeshed.thoughtbot.com/349) Squint test (https://www.youtube.com/watch?v=8bZh5LMaSmE) Episode 405: Retro on Sandi Metz rules (https://bikeshed.thoughtbot.com/405) Structuring conditionals in a wizard (https://thoughtbot.com/blog/structuring-conditionals-in-a-wizard) Episode 417: Module docs (https://bikeshed.thoughtbot.com/417) Episode 416: Multidimensional numbers (https://bikeshed.thoughtbot.com/416) ruby-units gem (https://github.com/olbrich/ruby-units) Solargraph (https://marketplace.visualstudio.com/items?itemName=castwide.solargraph) parity (https://github.com/thoughtbot/parity) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville, and together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: Just recently, I ran a sort of mini workshop for some colleagues here at thoughtbot to dig into the idea of query plans and, how to read them, how to use them. And, initially, this was going to be more of a kind of presentation style. And a colleague and I who were sharing this decided to go for a more interactive format where, you know, this is a, like, 45-minute slot. And so, we set it up so that we did a sort of intro to query plans in about 10 minutes then 15 minutes of breakout rooms, where people got a chance to have a query plan. And they had some sort of comprehension questions to answer about it. And then, 15 minutes together to have each group share a little bit about what they had discovered in their query plan back with the rest of the group, so trying to balance some understanding, some application, some group discussion, trying to keep it engaging. It was a pretty fun approach to sharing information like that. STEPHANIE: Yeah. I wholeheartedly agree. I got to attend that workshop, and it was really great. Now that I'm hearing you kind of talk about the three different components and what you wanted people attending to get out of it, I am impressed because [laughs] there is, like, a lot more thought, I think, that went into just participant engagement that reflecting on it now I'm like, oh yeah, like, I think that was really effective as opposed to just a presentation. Because you had, you know, sent us out into breakout rooms, and each group had a different query that they were analyzing. You had kind of set up links that had the query set up in the query analyzer. I forget what the tool was called that you used. JOËL: I forget the name of it, but we will link it in the show notes. STEPHANIE: Yeah. It was helpful for me, though, because, you know, I think if I were just to have learned about it in a presentation or even just looked at, you know, screenshots of it on a slide, that's different still from interacting with it and feeling more confident to use it next time I find myself in a situation where it might be helpful. JOËL: It's really interesting because that was sort of the goal of it was to make it a bit more interactive and then, hopefully, helping people to retain more information than just a straight up, like, presentation would be. I don't know how you feel, I find that often when I go to a place like, let's say, RailsConf, I tend to stay away from more of the workshop-y style events and focus more on the talks. Is that something that you do as well? STEPHANIE: Yeah. I have to confess that I've never attended a workshop [laughs] at a conference. I think it's partly my learning style and also partly just honestly, like, my energy level when I'm at the conference. I kind of just want to sit back. It's on my to-do list. Like, I definitely want to attend one just to see what it's like. And maybe that might even inspire me to want to create my own workshop. But it's like, once I'm in it, and, you know, like, everyone else is also participating, I'm very easily peer pressured [laughs]. So, in a group setting, I will find myself enjoying it a lot more. And I felt that kind of same way with the workshop you ran for our team. Though, I will say a funny thing that happened was that when I went out into my breakout group with another co-worker, and we were trying to grok this query that you gave us, we found out that we got the hardest one, the most complicated one [laughs] because there were so many things going on. There was, like, multiple, like, you know, unions, some that were, like, nested, and then just, like, a lot of duplication as well, like, some conditions that were redundant because of a different condition happening inside of, like, an inner statement. And yeah, we were definitely scratching our heads for a bit and were very grateful that we got to come back together as a group and be like, "Can someone please help? [laughs] Let's figure out what's going on here." JOËL: Sort of close that loop and like, "Hey, here's what we saw. What does everybody else see?" STEPHANIE: Yeah, and I appreciated that you took queries from actual client projects that you were working on. JOËL: Yeah, that was the really fun part of it was that these were not sort of made-up queries to illustrate a point. These were actual queries that I had spent some time trying to optimize and where I had had to spend a lot of time digging into the query plans to understand what was going on. And it sounds like, for you, workshops are something that is...they're generally more engaging, and you get more value out of them. But there's higher activation energy to get started. Does that sound right? STEPHANIE: Yeah, that sounds right. I think, like, I've watched so many talks now, both in person and on YouTube, that a lot of them are easily forgettable [laughs], whereas I think a workshop would be a lot more memorable because of that interactivity and, you know, you get out of it what you put in a little bit. JOËL: Yeah, that's true. Have you looked at the schedule for RailsConf 2024 yet? And are there any workshops on there that you're maybe considering or that maybe have piqued your interest? STEPHANIE: I have, in fact, and maybe I will check off attending a workshop [laughs] off my bucket list this year. There are two that I'm excited about. Unfortunately, they're both at the same time slot, so I -- JOËL: Oh no. You're going to have to choose. STEPHANIE: I know. I imagine I'll have to choose. But I'm interested in the Let's Extend Rails With A Gem by Noel Rappin and Vision For Inclusion Workshop run by Todd Sedano. The Rails gem one I'm excited about because it's just something that I haven't had to do really in my dev career so far, and I think I would really appreciate having that guidance. And also, I think that would be motivation to just get that, like, hands-on experience with it. Otherwise, you know, this is something that I could say that I would want to do and then never get [chuckles] around to it. JOËL: Right, right. And building a gem is the sort of thing that I think probably fits better in a workshop format than in a talk format. STEPHANIE: Yeah. And I've really appreciated all of Noel's content out there. I've found it always really practical, so I imagine that the workshop would be the same. JOËL: So, other than poring over the RailsConf schedule and planning your time there, what has been new for you this week? STEPHANIE: I have a really silly one [laughs]. JOËL: Okay. STEPHANIE: Which is, yesterday I went out to eat dinner to celebrate my partner's birthday, and I experienced, for the first time, robots [laughter] at this restaurant. So, we went out to Hot Pot, and I guess they just have these, like, robot, you know, little, small dish delivery things. They were, like, as tall as me, almost, at least, like, four feet. They were cat-themed. JOËL: [laughs] STEPHANIE: So, they had, like...shaped like cat...they had cat ears, and then there was a screen, and on the screen, there was, like, a little face, and the face would, like, wink at you and smile. JOËL: Aww. STEPHANIE: And I guess how this works is we ordered our food on an iPad, and if you ordered some, like, side dishes and stuff, it would come out to you on this robot cat with wheels. JOËL: Very fun. STEPHANIE: This robot tower cat. I'm doing a poor job describing it because I'm still apparently bewildered [laughs]. But yeah, I was just so surprised, and I was not as...I think I was more, like, shocked than delighted. I imagine other people would find this, like, very fun. But I was a little bit bewildered [laughs]. The other thing that was very funny about this experience is that these robots were kind of going down the aisle between tables, and the aisles were not quite big enough for, like, two-way traffic. And so, there were times where I would be, you know, walking up to go use the restroom, and I would turn the corner and find myself, like, face to face with one of these cat robot things, and, like, it's starting to go at me. I don't know if it will stop [laughs], and I'm the kind of person who doesn't want to find out. JOËL: [laughs] STEPHANIE: So, to avoid colliding with this, you know, food delivery robot, I just, like, ran away from it [laughs]. JOËL: You don't know if they're, like, programmed to yield or something like that. STEPHANIE: Listen, it did not seem like it was going to stop. JOËL: [laughs] STEPHANIE: It got, like, I was, you know, kind of standing there frozen in paralysis [laughs] for a little while. And then, once it got, I don't know, maybe two or three feet away from me, I was like, okay, like, this is too close for comfort [laughs]. So, that was my, I don't know, my experience at this robot restaurant. Definitely starting to feel like I'm in the, I don't know, is this the future? Someone, please let me know [laughs]. JOËL: Is this a future that you're excited or happy about, or does this future seem a little bit dystopian to you? STEPHANIE: I was definitely alarmed [laughter]. But I'm not, like, a super early adopter of new technology. These kinds of innovations, if you will, always surprise me, and I'm like, oh, I guess this is happening now [laughs]. And I will say that the one thing I did not enjoy about it is that there was not enough room to go around this robot. It definitely created just pedestrian traffic issues. So, perhaps this could be very cool and revolutionary, but also, maybe design robots for humans first. JOËL: Or design your dining room to accommodate your vision for the robots. I'm sure that flying cars and robots will solve all of this, for sure. STEPHANIE: Oh yeah [laughter]. Then I'll just have to worry about things colliding above my head. JOËL: And for the listeners who cannot see my face right now, that was absolutely sarcasm [laughs]. Speaking of our listeners, today we're going to look at a group of different listener questions. And if you didn't know that, you could send in a question to have Stephanie and I discuss, you can do that. Just send us an email at hosts@bikeshed.fm. And sometimes, we put it into a regular episode. Sometimes, we combine a few and sort of make a listener question episode, which is what we're doing today. STEPHANIE: Yeah. It's a little bit of a grab bag. JOËL: Our first question comes from Yuri, and Yuri actually has a few different questions. But the first one is asking about Episode 349, which is pretty far back. It was my first episode when I was coming on with Chris and Steph, and they were sort of handing the baton to me as a host of the show. And we talked about a variety of hot takes or unpopular opinions. Yuri mentions, you know, a few that stood out to him: one about SPAs being not so great, one about how you shouldn't need to have a side project to progress in your career as a developer, one about developer title inflation, one about DRY and how it can be dangerous for a mid-level dev, avoiding let in RSpec specs, the idea that every if should come with an else, and the idea that developers shouldn't be included in design and planning. And Yuri's question is specifically the question about if statements, that every if should come with an else. Is that still an opinion that we still have, and why do we feel that way? STEPHANIE: Yeah, I'm excited to get into this because I was not a part of that episode. I was a listener back then when it was still Steph and Chris. So, I am hopefully coming in with a different, like, additional perspective to add as well while we kind of do a little bit of a throwback. So, the one about every if should come with an else, that was an unpopular opinion of yours. Do you mind kind of explaining what that means for you? JOËL: Yeah. So, in general, Ruby is an expression-oriented language. So, if you have an if that does not include an else, it will implicitly return nil, which can burn you. There may be some super expert programmers out there that have never run into undefined method for nil nil class, but I'm still the kind of programmer who runs into that every now and then. And so, implicit nils popping up in my code is not something I generally like. I also generally like having explicit else for control flow purposes, making it a little bit clearer where flow of control goes and what are the actual paths through a particular method. And then, finally, doing ifs and elses instead of doing them sort of inline or as trailing conditionals or things like that, by having them sort of all on each lines and balancing out. The indentation itself helps to scan the code a little bit more. So, deeper indentation tells you, okay, we're, like, nesting multiple conditions, or something like that. And so, it makes it a little bit easier to spot complexity in the code. You can apply, and I want to say this is from Sandi Metz, the squint test. STEPHANIE: Yeah, it is. JOËL: Where you just kind of, like, squint at your code so you're not looking at the actual characters, and more of the structure, and the indentation is actually a friend there rather than something to fight. So, that was sort of the original, I think, idea behind that. I'm curious, in your experience, if you would like to balance your conditionals, ifs with something else, or if you would like to do sort of hanging ifs. STEPHANIE: Hanging ifs, I like that phrase that you just coined there. I agree with your opinion, and I think it's especially true if you're returning values, right? I mean, in Ruby, you kind of always are. But if you are caring about return values, like you said, to avoid that implicit nil situation, I find, especially if you're writing tests for that code, it's really easy, you know, if you spot that condition, you're like, okay, great. Like, this is a path I need to test. But then, oftentimes, you don't test that implicit path, and if you don't enter the condition, then what happens, right? So, I think that's kind of what you're referring to when you talk about both. It's, like, easier to spot in terms of control flow, like, all the different paths of execution, as well as, yeah, like, saving you the headaches of some bugs down the line. One thing that I thought about when I was kind of revisiting that opinion of yours is the idea of like, what are you trying to communicate is different or special about this condition when you are writing an if statement? And, in my head, I kind of came up with a few different situations you might find yourself in, which is, one, where you truly just have, like, a special case, and you're treating that completely differently. Another when you have more of a, like, binary situation, where it's you want to kind of highlight either...more of a dichotomy, right? It's not necessarily that there is a default but that these are two opposite things. And then, a third situation in which you have multiple conditions, but you only happen to have two right now. JOËL: Interesting. And do you think that, like, breaking down those situations would lead you to pick different structures for writing your conditionals? STEPHANIE: I think so. JOËL: Which of those scenarios do you think you might be more likely to reach for an if that doesn't have an else that goes with it? STEPHANIE: I think that first one, the special case one. And in Yuri's email, he actually asked, as a follow-up, "Do we avoid guard clauses as a result of this kind of heuristic or rule?" And I think that special case situation is where a guard clause would shine because you are highlighting it by putting it at the top of a method, and then saying like, you know, "Bail out of this" or, like, "Return this particular thing, and then don't even bother about the rest of this code." JOËL: I like that. And I think guard clauses they're not the first thing I reach for, but they're not something I absolutely avoid. I think they need to be used with care. Like you said, they have to be in the top of your method. If you're adding returns and things that break out of your method, deep inside a conditional somewhere, 20 lines into your method, you don't get to call that a guard clause anymore. That's something else entirely. I think, ideally, guard clauses are also things that will break out of the method, so they're maybe raising exception. Maybe they're returning a value. But they are things that very quickly check edge cases and bail so that the body of the method can focus on expecting data in the correct shape. STEPHANIE: I have a couple more thoughts about this; one is I'm reminded of back when we did that episode on kind of retroing Sandi Metz's Rules For Developers. I think one of the rules was: methods should only be five lines of code. And I recall we'd realized, at least I had realized for the first time, that if you write an if-else condition in Ruby, that's exactly five lines [laughs]. And so, now that I'm thinking about this topic, it's cool to see that a couple of these rules converge a little bit, where there's a bit of explicitness in saying, like, you know, if you're starting to have more conditions that can't just be captured in a five-line if-else statement, then maybe you need something else there, right? Something perhaps like polymorphic or just some way to have branched earlier. JOËL: That's true. And so, even, like, you were talking about the exceptional edge cases where you might want to bail. That could be a sign that your method is doing too much, trying to like, validate inputs and also run some sort of algorithm. Maybe this needs to be some sort of, like, two-step thing, where there's almost, like, a parsing phase that's handled by a different object or a different method that will attempt to standardize your inputs and raise the appropriate errors and everything. And then, your method that has the actual algorithm or code that you're trying to run can just assume that its inputs are in the correct shape, kind of that pushing the uncertainty to the edges. And, you know, if you've only got one edge case to check, maybe it's not worth to, like, build this in layers, or separate out the responsibilities, or whatever. But if you're having a lot, then maybe it does make sense to say, "Let's break those two responsibilities out into two places." STEPHANIE: Yeah. And then, the one last kind of situation I've observed, and I think you all talked about this in the Unpopular Opinions episode, but I'm kind of curious how you would handle it, is side effects that only need to be applied under a certain condition. Because I think that's when, if we're focusing less on return values and more just on behavior, that's when I will usually see, like, an if something, then do this that doesn't need to happen for the other path. JOËL: Yes. I guess if you're doing some sort of side effect, like, I don't know, making a request to an API or writing to a file or something, having, like, else return nil or some other sentinel value feels a little bit weird because now you're caring about side effects rather than return values, something that you need to keep thinking of. And that's something where I think my thing has evolved since that episode is, once you start having multiple of these, how do they compose together? So, if you've got if condition, write to a file, no else, keep going. New if condition, make a request to an API endpoint, no else, continue. What I've started calling independent conditions now, you have to think about all the different ways that they can combine, and what you end up having is a bit of a combinatorial explosion. So, here we've got two potential actions: writing to a file, making a request to an API. And we could have one or the other, or both, or neither could happen, depending on the inputs to your method, and maybe you actually want that, and that's cool. Oftentimes, you didn't necessarily want all of those, especially once you start going to three, four, five. And now you've got that, you know, explosion, like, two to the five. That's a lot of paths through your method. And you probably didn't really need that many. And so, that can get really messy. And so, sometimes the way that an if and an else work where those two paths are mutually exclusive actually cuts down on the total number of paths through your method. STEPHANIE: Hmm, I like that. That makes a lot of sense to me. I have definitely seen a lot of, like, procedural code, where it becomes really hard to tell how to even start relating some of these concepts together. So, if you happen to need to run a side effect, like writing to a file or, I don't know, one common one I can think of is notifying something or someone in a particular case, and maybe you put that in a condition. But then there's a different branching path that you also need to kind of notify someone for a similar reason, maybe even the same reason. It starts to become hard to connect, like, those two reasons. It's not something that, like, you can really scan for or, like, necessarily make that connection because, at that point, you're going down different paths, right? And there might be other signals that are kind of confusing things along the way. And it makes it a lot harder, I think, to find a shared abstraction, which could ultimately make those really complicated nested conditions a little more manageable or just, like, easier to understand at a certain complexity. I definitely think there is a threshold. JOËL: Right. And now you're talking about nested versus non-nested because when conditions are sort of siblings of each other, an if-else behaves differently from two ifs without an else. I think a classic situation where this pops up is when you're structuring code for a wizard, a multi-step form. And, oftentimes, people will have a bunch of checks. They're like, oh, if this field is present, do these things. If this field is present, do these things. And then, it becomes very tricky to know what the flow of control is, what you can expect at what moment, and especially which actions might get shared across multiple steps. Is it safe to refactor in one place if you don't want to break step three? And so, learning to think about the different paths through your code and how different conditional structures will impact that, I think, was a big breakthrough for me in terms of taking the next logical step in terms of thinking, when do I want to balance my ifs and when do I not want to? I wrote a whole article on the topic. We'll link it in the show notes. So, Yuri, thanks for a great question, bringing us back into a classic developer discussion. Yuri also asks or gives us a bit of a suggestion: What about revisiting this topic and doing an episode on hot takes or unpopular topics? Is that something that you'd be interested in, Stephanie? STEPHANIE: Oh yeah, definitely, because I didn't get to, you know, share my hot topics the last episode [laughs]. [inaudible 24:23] JOËL: You just got them queued up and ready to go. STEPHANIE: Yeah, exactly. So, yeah, I will definitely be brainstorming some spicy takes for the show. JOËL: So, Yuri, thanks for the questions and for the episode suggestion. STEPHANIE: So, another listener, Kevin, wrote in to us following up from our episode on Module Docs and about a different episode about Multi-dimensional Numbers. And he mentioned a gem that he maintains. It's called Ruby Units. And it basically handles the nitty gritty of unit conversions for you, which I thought was really neat. He mentioned that it has a numeric class, and it knows how to do math [laughs], which I would find really convenient because that is something that I have been grateful not to have to really do since college [laughs], at least those unit conversions and all the things that I'd probably learned in math and physics courses [laughs]. So, I thought that was really cool, definitely is one to check out if you frequently work with units. It seemed like it would be something that would make sense for a domain that is more science or deals in that kind of domain. JOËL: I'm always a huge fan of anything that tags raw numbers that you're working with with a quantity rather than just floating raw numbers around. It's so easy to make a mistake to either treat a number as a quantity you didn't think of, or make some sort of invalid operation on it, or even to think you have a value in a different size than you do. You think you're dealing with...you know you have a time value, but you think it's in seconds. It's actually in milliseconds. And then, you get off by some big factor. These are all mistakes that I have personally made in my career, so leaning on a library to help avoid those mistakes, have better information hiding for the things that really aren't relevant to the work that I'm trying to do, and also, kind of reify these ideas so that they have sort of a name, and they're, like, their own object, their own thing that we can interact with in the app rather than just numbers floating around, those are all big wins from my perspective. STEPHANIE: I also just thought of a really silly use case for this that is, I don't know, maybe I'll have to experiment with this. But every now and then, I find the need to have to convert a unit, and I just pop into Google, and I'm like, please give me, you know, I'll search for 10 kilometers in miles or something [laughs]. But then I have to...sometimes Google will figure it out for me, and sometimes it will just list me with a bunch of weird conversion websites that all have really old-school UI [laughs]. Do you know what I'm talking about here? Anyway, I would be curious to see if I could use this gem as a command-line interface [laughs] for me without having to go to my browser and roll the dice with freecalculator.com or something like that [laughs]. JOËL: One thing that's really cool with this library that I saw is the ability to define your own units, and that's a thing that you'll often encounter having to deal with values that are maybe not one of the most commonly used units that are out there, dealing with numbers that might mean a thing that's very particular to your domain. So, that's great that the library supports that. I couldn't see if it supports multi-dimensional units. That was the episode that inspired the comment. But either way, this is a really cool library. And thank you, Kevin, for sharing this with us. STEPHANIE: Kevin also mentions that he really enjoys using YARD docs. And we had done that whole episode on Module Docs and your experience writing them. So, you know, your people are out there [laughs]. JOËL: Yay. STEPHANIE: And we talked about this a little bit; I think that writing the docs, you know, on one hand, is great for future readers, but, also, I think has the benefit of forcing the author to really think about their inputs and outputs, as Kevin mentions. He's found bugs by simply just going through that process in designing his code, and also recommends Solargraph and Solargraph's VSCode extension, which I suspect really kind of makes it easy to navigate a complex codebase and kind of highlight just what you need to know when working with different APIs for your classes. So, I recently kind of switched to the Ruby LSP, build with Shopify, but I'm currently regretting it because nothing is working for me right now. So, that might be the push that I need [laughs] to go back to using Solargraph. JOËL: It's interesting that Kevin mentions finding bugs while writing docs because that has absolutely been my experience. And even in this most recent round, I was documenting some code that was just sort of there. It wasn't new code that I was writing. And so, I had given myself the rule that this would be documentation-only PRs, no code changes. And I found some weird code, and I found some code that I'm 98% sure is broken. And I had to have the discipline to just put a notice in the documentation to be like, "By the way, this is how the method should work. I'm pretty sure it's broken," and then, maybe come back to it later to fix it. But it's amazing how trying to document code, especially code that you didn't write yourself, really forces you to read it in a different way, interact with it in a different way, and really, like, understand it in a deep way that surprised me a little bit the first time I did it. STEPHANIE: That's cool. I imagine it probably didn't feel good to be like, "Hey, I know that this is broken, and I can't fix it right now," but I'm glad you did. That takes a lot of, I don't know, I think, courage, in my opinion [laughs], to be like, "Yeah, I found this, and I'm going to, you know, like, raise my hand acknowledging that this is how it is," as supposed to just hiding behind a broken functionality that no one [laughs] has paid attention to. JOËL: And it's a thing where if somebody else uses this method and it breaks in a way, and they're like, "Well, the docs say it should behave like this," that would be really frustrating. If the docs say, "Hey, it should behave like this, but it looks like it's broken," then, you know, I don't know, I would feel a little bit vindicated as a person who's annoyed at the code right now. STEPHANIE: For sure. JOËL: Finally, we have a message from Tim about using Postgres' EXPLAIN ANALYZE. Tim says, "Hey, Joël, in the last episode, you talked a bit about PG EXPLAIN ANALYZE. As you stated, it's a great tool to help figure out what's going on with your queries, but there is a caveat you need to keep in mind. The query planner uses statistics gathered on the database when making decisions about how to fetch records. If there's a big difference between your dev or staging database and production, the query may make different decisions. For example, if a table has a low number of records in it, then the query planner may just do a table scan, but in production, it might use an index. Also, keep in mind that after a schema changes, it may not know about new indexes or whatever unless an explicit ANALYZE is done on the table." So, this is really interesting because, as Tim mentions, EXPLAIN ANALYZE doesn't behave exactly the same in production versus in your local development environment. STEPHANIE: When you were trying to optimize some slow queries, where were you running the ANALYZE command? JOËL: I used a combination. I mostly worked off of production data. I did a little bit on a staging database that had not the same amount of records and things. That was pretty significant. And so, I had to switch to production to get realistic results. So, yes, I encountered this kind of firsthand. STEPHANIE: Nice. For some reason, this comment also made me think of..., and I wanted to plug a thoughtbot shell command that we have called Parity, which lets you basically download your production database into your local dev database if you use Heroku. And that has come in handy for me, obviously, in regular development, but would be really great in this use case. JOËL: With all of the regular caveats around security, and PII, and all this stuff that come with dealing with production data. But if you're running real productions on production, you should be cleared and, like, trained for access to all of that. I also want to note that the queries that you all worked with on Friday are also from the production database. STEPHANIE: Really? JOËL: So, you got to see what it actually does, what the actual timings were. STEPHANIE: I'm surprised by that because we were using, like, a web-based tool to visualize the query plans. Like, what were you kind of plugging into the tool for it to know? JOËL: So, the tool accepts a query plan, which is a text output from running a SQL query. STEPHANIE: Okay. So, it's just visualizing it. JOËL: Correct. Yeah. So, you've got this query plan, which comes back as this very intimidating block of, like, text, and arrows, and things like that. And you plug it into this web UI, and now you've got something that is kind of interactive, and visual, and you can expand or collapse nodes. And it gives you tooltips on different types of information and where you're spending the most time. So, yeah, it's just a nicer way to visualize that data that comes from the query plan. STEPHANIE: Gotcha. That makes sense. JOËL: So, that's a very important caveat. I don't think that's something that we mentioned on the episode. So, thank you, Tim, for highlighting that. And for all of our listeners who were intrigued by leaning into EXPLAIN ANALYZE and query plan viewers to debug your slow queries, make sure you try it out in production because you might get different results otherwise. STEPHANIE: So, yeah, that about wraps up our listener topics in recent months. On that note, Joël, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeee!!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
Stephanie revisits the concept of "spiking"—a phase of exploration to determine the feasibility of a technical implementation or to address unknowns in feature requests—sharing her recent experiences with a legacy Rails application. Joël brings a different perspective by discussing his involvement with a client project that heavily utilizes the dry-rb suite of gems, highlighting the learning curve associated with adapting to new patterns and libraries. Joël used to be much more idealistic and has moved to be more pragmatic. Stephanie has moved the other way. So together, Stephanie and Joël engage in a philosophical discussion on being an idealistic versus a pragmatic programmer. They explore the concept of programming as a blend of science and art, where technical decisions are not only about solving problems but also about expressing ideas and building shared understandings within a team. Spike tasks episode (https://bikeshed.thoughtbot.com/414) dry-rb (https://dry-rb.org/) Working with Maybe talk (https://www.youtube.com/watch?v=43eM4kNbb6c) Problem solving with maybe (https://thoughtbot.com/blog/problem-solving-with-maybe) Programming as Theory Building (https://pablo.rauzy.name/dev/naur1985programming.pdf) The Pragmatic Programmer (https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/) Transcript: JOËL: Hello and welcome to another episode of the Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn, and together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: So, a few weeks ago, we did an episode on spiking in response to a listener question. And I wanted to kind of revisit that topic for a little bit because I've been doing a lot of spiking on my client project. And for those who are not familiar, the way that I understand or define spikes is kind of as an exploration phase to figure out if a technical implementation might work. Or if you have a feature request with some unknowns, you can spend some time-boxed spiking to figure out what those unknowns might be. And I'm working on your typical legacy Rails application [laughs]. And I think one thing that we talked about last time was this idea of, at what point does spiking end up being just working on the feature [laughs]? And I think that's especially true in an older codebase, where you kind of have to go down a few rabbit holes, maybe, just to even find out if something will trip you up down the line. And the way I approached that this time around was just, like, identifying the constraints and putting a little flag there for myself. Like, these were rabbit holes that I could go down, but, you know, towards the initial beginning phase of doing the spiking, I decided not to. I just kind of bookmarked it for later. And once I had identified the main constraints, that was when I was like, okay, like, what kind of solutions can I come up with for these constraints? And that actually then helped me kind of decide which ones we're pursuing a little bit more to get, like, the information I needed to ultimately make a decision about whether this was worth doing, right? It kind of kept me...I'm thinking about, you know, when you are bowling with those safety guards [laughs], it keeps your ball from just rolling into the gutter. I think it helped with not going too deep into places that I may or may not be super fruitful while also, I think, giving me enough information to have a more realistic understanding of, like, what this work would entail. JOËL: Would you say that this approach that you're taking is inspired or maybe informed by the conversation we had on the episode? STEPHANIE: I was especially interested in avoiding the kind of binary of like, no, we can't do this because the system just, you know, isn't able to support it, or it's just too...it would be too much work. That was something I was really, like you said, kind of inspired by after that conversation because I wanted to avoid that trap a little bit. And I think another really helpful framing was the idea of, like, okay, what would need to be done in order to get us to a place where this could be possible? And that's why I think identifying those constraints was important because they're not constraints forever. Like, we could do something about them if we really wanted to, so kind of avoiding the, like, it's not possible, right? And saying like, "It could be. Here's all the things that we need to do in order to make it possible." But I think that helped shift the conversation, especially with stakeholders and stuff, to be a little bit more realistic and collaborative. So, Joël, what's new in your world? JOËL: So, I'm also on a new client project, and a thing that's been really interesting in this codebase is that they've been using the dry-rb suite of gems pretty heavily. And I've seen a lot about the suite of gems. I've read about them. Interestingly, this is kind of the first time that I've been on a codebase that sort of uses them as a main pattern in the app. So, there's been a bit of a learning curve there, and it's been really interesting. STEPHANIE: This is exciting to me because I know you have a lot of functional programming background, also, so it's kind of surprising that you're only now, you know, using something that explicit from functional languages in Ruby. And I'm curious: what's the learning curve, if not the paradigm? Like, what are you kind of encountering? JOËL: I think there's a little bit of just the translation. How do these gems sort of approach this? So, they have to do a couple of, like, clever Ruby things to make some of these features work. Some of these also will have different method names, so a lot of just familiarizing myself with the libraries. Like, oh, well, this thing that I'm used to having called a particular thing has a slightly different name here or maybe not having all of the utilities. I was like, oh, how do we traverse with this particular library? Then you have to, like, look it up. So, it's a lot of like, how do I do this thing I know how to do in, let's say, Elm? How do I translate that into Ruby? But then, also, some of the interplay of how that works in code that also does some very kind of imperative side effecty things also written by a team that is getting used to the pattern. And so, you'll sort of see things where people are pulling things in, but maybe you don't fully understand the deeper underlying approach that's meant to be used. STEPHANIE: Have you noticed any use cases where the dry-rb patterns really shine in your application? JOËL: A thing that's nice is that I think it really forces you to think about your edge cases in a way that sometimes Ruby developers play very fast and loose with "Yeah, whatever, it will never be nil." Push to production immediately start getting NoMethodError in your bug tracker. I never do this, by the way, but you know. STEPHANIE: [laughs]. JOËL: Speaking from a friend's experience [laughs]. STEPHANIE: Asking for a friend, yeah [laughs]. JOËL: I think a thing that I've sort of had to figure out sort of every time I deal with these patterns in different languages is just the importance of good composition and good separation. Because you're adding these sort of wrapper context around things, if you're constantly wrapping and unwrapping, you're like, check things inside, and then do the next thing, and then unwrap again and branch and check and do the next thing, that code becomes really clunky in a way that you just sort of expect to do if you're just writing code in regular Ruby with a nil. But it doesn't really work with a dry-rb maybe or a result. So, the pattern that I have found that works really well is to extract sort of every operation that can be, let's say, that could fail so that it would give you a result back. Extract that out into its own separate function that will construct a success or a failure, and then have your sort of main code that wants to then do a bunch of these things together. All it does is use some of the dry-rb helper methods to compose all of these together, whether that's just some sort of, like, do notation, or binding, or fmap, or something like that, which allows you to have sort of individual chunks that can fail, and then one sort of aggregator piece of code that just finds a way to combine all of them nicely. And that avoids you having to do all this repetition. STEPHANIE: Yeah, that makes a lot of sense. JOËL: It's a pattern, I think; I had to learn the hard way when I was working with Elm. Because if you're taking a potential nullable value and then you want to do things with it but then that potential operation is also nullable because the input was potentially null, and then that just sort of propagates all the way down the chain. So, my whole chain of functions now is doing checks for nullability. And in Ruby, I could just be like, no, I checked it in the first function. I can then just trust that it's not null down the chain. Elm doesn't do the like, trust me, bro. The compiler will force you to validate every time, and then the code just blows up, and it gets really painful. So, I had to start thinking about new models of thinking that would separate out code that actually needs to care and code that doesn't need to care about nullability. And I wrote an article about that. That turned into actually a conference talk as well. And these sort of ideas have served me really well at Elm. And I think these translate pretty well to dry-rb as well. That's something that I'm exploring, but the principles seem like they're not tied to a particular language. STEPHANIE: Yeah, and it's kind of cool that you experienced all of that in working with Elm, where a compiler was there to yell at you [laughs] and kind of forcing you to...I don't know if do the right thing is the right word, but kind of think in the way that it wants you to think. And I can see people who are coming from Ruby and starting to experiment with dry-rb maybe needing a bit of that since it's not built-in in the tooling, just in a recoder view or just in conversations among devs. JOËL: [inaudible 09:26] Beyond just the idea of wrapping your values and making sure you check them all the time, there are patterns that make that easier or more painful. And even in something like Elm, the compiler would yell at me would make sure I could not have a runtime error by forgetting to check for nullability. It did not prevent me from writing monstrosities of nested repeated conditionals checking if nil, if nil, if nil. That I had to figure out some sort of, like, higher-level patterns that play nicely with that kind of software. And I think these are things that people have to sort of encounter, feel the pain, feel the frustration, and then move into those better patterns after the fact. And sometimes that's not easy because it's not obvious why that's a valuable pattern to approach. STEPHANIE: Yeah, I agree completely. Speaking of following patterns and kind of arriving at maybe an ideal version of [chuckles], you know, what you'd like your code to do, you know, to build what you are looking to build [laughs]...this is my very poor attempt at a smooth transition that Joël [laughter] manages to be able to do [laughs] whenever we're trying to shift into the topic of the episode. Anyway, today, we were hoping to talk a little bit about this idea between being an idealistic programmer and a pragmatic programmer and the different journeys that we've each been on in arriving kind of how to balance the two. JOËL: Yeah, you know, I think neither of these are absolutes, right? It's a spectrum. You probably move around that spectrum from day to day, and then probably, like, more general trends over your career. But I'm curious, for you today, if you had to pick one of those labels, like, which sort of zone of the spectrum would you put yourself in? Do you think you're more idealistic or more pragmatic? STEPHANIE: I think I'm in a more of an idealistic zone right now. JOËL: Would you say you're kind of like middle trending idealistic or kind of, like, pretty far down the idealistic side? STEPHANIE: Middle trending idealistic. I like that way of describing it. I want to know where you are. And then I kind of wanted to try to take a step back and even define what that means for both of us. JOËL: Right, right. I think the way I'd probably describe myself is a recovering idealist. STEPHANIE: Oof. Yeah [laughs]. JOËL: I think there was a time where I was really idealistic. I really like knowing sort of underlying theory of software construction, broader patterns. By patterns here, I don't mean necessarily, like, you know, the Gang of Four, but just general sort of approaches that work well and using that to guide my work. But I've also been trending a lot more into the, like, pragmatic side of things in the past few years. STEPHANIE: So, could you kind of tell me a little bit about what does pragmatic mean for you and what does ideal mean for you? JOËL: So, I think the pragmatic side of me it's about delivering working software. If you're not shipping anything, you know, the most beautiful piece of art that you've created just warms your heart is useless. So, I think I'm sort of at the extreme end of pragmatism, right? It's all about shipping and shipping fast. And, in the end, that's generally the goal of software. On the more idealistic side, the sort of doing everything kind of perfect or by the book, or, you know, maybe in a way that brings you personal satisfaction, oftentimes, at the expense of shipping and vice versa. Sometimes shipping comes at the expense of writing absolutely terrible code, but, of course, you know, there's value in both. Shipping is what actually delivers value to your users, your company, yourself if you're using the software. But if you're not following patterns and things, you're often stuck in a really short-term thinking loop, where you are maybe delivering value today at the cost of being able to deliver value tomorrow or writing code that is unreadable or code that is difficult to collaborate on. So, more than just me shipping an individual feature, I've got to think about, while I'm working with a team, how can I help them be able to ship features or build on top of my work for tomorrow? So, that's sort of how I visualize the field. I'm curious what the words idealism and pragmatism mean to you. STEPHANIE: Yeah. I agree with you that pragmatism is, you know, this idea of delivering working software. And I think I have seen it very, you know, kind of condensed as, like, moving quickly, getting stuff out the door, basically, like, end result being, like, a thing that you can use, right? I think I've personally been reassessing that idea a lot because I'm kind of almost wondering like, well, what are we moving quickly for [laughs]? I sometimes have seen pragmatism just end there being like, okay, like, it's all about velocity. And then, I'm kind of stuck being like, well, if you write working software for, you know, completely the wrong thing, is that still pragmatic? I don't know. So, that's kind of where I'm at these days with–I'm feeling a little bit more suspect of pragmatism, at least wanting to make sure that, especially with the people that I'm working with day to day, that we're agreeing on what that means and what success means. And then, as for idealism, I think also, actually, I now have a little bit of duality in terms of how I understand that as well. One of them being, yes, definitely, like, by the book or, like, by the ideas that we've, you know, some very smart people [laughs] have figured out as, like, this is clean or good quality, or these are the patterns to, you know, make your code as, again, as clean, I don't know, kind of putting air quotes around that, as possible. And then, I actually like what you really said about code that warms your heart [laughs] that you feel, like, really moved by or, like, just excited about or inspired by because I think that can also be a little bit different from just following theories that other people have defined. The more I spend doing this stuff, the more I am convinced that writing software is actually a very creative practice. And that's something that I've, like, definitely had to balance with the pragmatism a bit more because there are days when it's just not coming [chuckles], you know, like, I just stare at a blank, new file. And I'm like, I can't even imagine what these classes would be because, like, that creative part of my brain just, like, isn't on that day. So, that's kind of where I'm sitting in terms of, like, what idealistic programming kind of seems to me. JOËL: There's definitely an element of programming that feels like self-expression, you know, there are parameters around that. And working with a team, you probably all sort of, like, move towards some average. But I would definitely say that there is some element of self-expression in coding. STEPHANIE: Yeah, 100%. Have you heard about this paper called Programming as Theory Building? JOËL: The name sounds vaguely familiar, but I can't place the main idea in my mind right now. STEPHANIE: It's, like, an academic-ish paper from the 80s. And I'll link to it in the show notes because I can't remember the author right now. But the idea is writing code is actually just one way of expressing a theory that we are building. In fact, that expression doesn't even....it's like, it's impossible for it to fully encapsulate everything that was involved in the building of the theory because every decision you make, you know, you decide what not to do as well, right? Like, all the things that you didn't encode in your application is still part of this theory, like stuff that you rejected in order to interpret and make abstract the things that you are translating from the quote, unquote "real world" into code. That really stuck with me because, in that sense, I love this idea that you can create your own little world, right? Like, you're developing it when you code. And that is something that gets lost a little bit when we're just focused on the pragmatic side of things. JOËL: Where things get tricky as well is that when you're working with a team, you're not just building your own little world. You're building a shared world with shared mental models, shared metaphors. That's where oftentimes it becomes important to make sure that the things that you are thinking about are expressed in a way that other people could read your code and then immediately pick up on what's happening. And that can be through things like documentation, code comments. It can also be through more rigorous data modeling. So, for example, I am a huge fan of value objects in general. I tend to not have raw numbers floating around in an app. I like to wrap them in some kind of class and say, "Hey, these numbers that are floating around they actually represent a thing," and I'll name that thing so that other people can get a sense that, oh, it is one of the moving parts of this app, and then here are the behaviors that we expect on it. And that is partly for sort of code correctness and things like that but also as a sort of way of communicating and a way of contributing to that shared reality that we're creating with the team in a way that if I just left a raw number, that would be almost, like, leaving something slightly undefined. Like, the number is there. It does a thing, but what it does is maybe a little bit more implied. I know in my mind that this is a dollar amount, and maybe there's even a comment above it that says, "Dollar amount." But it makes it a little bit harder for it to play in with everybody else's realities or view of the system than if it were its own object. STEPHANIE: Yeah, I like what you said about you're building a shared world with your fellow colleagues. And that helped explain to me why, as some people say, naming is the hardest part about building software because, yeah, like you said, even just saying you are wanting to make a method or class expressive. And we talked about how code is a way of expressing yourself. You could, like, name all your stuff in Wingdings [laughs], but we don't. I actually don't know if you could do that. But that was, for some reason, what I imagined. I was like, it's possible, and you could deliver software in complete gibberish [laughs]. JOËL: In theory, could you say that naming your variables as emoji is the most expressive way? Because now it's all emotions. STEPHANIE: A picture is worth a thousand words, as they say. JOËL: So, this variable is the frowny face, upside-down smile face. It doesn't get more expressive than that. STEPHANIE: At a former company, in our Slack workspace, I had a co-worker who loved to use the circus tent emoji to react to things. And, like, I'm convinced that no one really knew what it meant, but we also kind of knew what it meant. We were just like, oh yeah, that's the emoji that she uses to express amusement or, like, something a little bit ironic. And we all kind of figured it out [laughs] eventually. So, again, I do think it's possible. I bet someone has done, like, a creative experiment with writing an application in just emojis. This is now going to be some research I do after this episode [laughter]. JOËL: It is fun when you have, like, a teammate. You know they have the signature emoji that they respond to on things. STEPHANIE: Yep. Absolutely. So, you know, we kind of spent a little bit of time talking about idealism. I actually wanted to pull back to the idea of pragmatism because, in preparation for this episode, I also revisited my copy of The Pragmatic Programmer. Are you familiar with this book? Have you read it at all? JOËL: I have read it. It's been probably ten years. We did, I think, a book club at thoughtbot to go through the book. STEPHANIE: I was skimming the table of contents because I was curious about, again, that, like, definition of pragmatism. You and I had kind of talked about how it can be short-sighted. But what I was actually pretty impressed with, and I imagine this is why the book holds up, you know, after decades, is success for them also means being able to continue to deliver quality software. And that idea of continuity kind of implied, to me, that there was an aspect of, like, making sure the quality meets a certain threshold and, like, incorporating these theories and doing the best practices because they're thinking about success over time, right? Not just the success of this particular piece that you're delivering. JOËL: I would say most people in our industry are sort of balancing those two objectives, right? They're like, we want to have a decent velocity and ship things, but at the same time, we want to be able to keep delivering. We want a certain threshold of quality. In between those two objectives, there is a sea of trade-offs, and how you manage them are probably a little bit part of your personality as a developer and is probably also, to a certain extent, a function of your experience, learning sort of when to lean more into taking some shortcuts to ship faster and when to double down on certain practices that increase code quality, and what aspects of quality value more than others because not all forms of quote, unquote, "quality" are the same. I think a sort of source of danger, especially for newer developers, is you sort of start on almost, like, a hyper-pragmatic side of things because most people get into software because they want to build things. And the ultimate way to build is to ship, and then you sort of encounter problems where you realize, oh, this code is really clunky. It's harder and harder to ship. Let me learn some elements of code quality. Let's get better at my craft so that I can build software that has fewer bugs or that I can ship more consistently. And that's great. And then, you sort of run into some, like, broader sort of theories of programming: patterns, structures, things like that. And it becomes very easy to sort of blindly copy-paste that everywhere to the point where I think it's almost a bit of a meme, the, like, intermediate programmer who's read Clean Code or the Design Patterns book and is just now, like, applying these things blindly to every piece of code they encounter to the annoyance of the entire team. STEPHANIE: I think you just about described my trajectory [laughter], though hopefully, I was not so obnoxious about [laughs] it for my team having to deal with my, like, discovering [laughs] theories that have long been used. JOËL: I think we kind of all go through that journey to a certain extent, right? It's a little bit different for every one of us, but I think this is a journey that is really common for developers. STEPHANIE: Yeah. One thing I frequently think about a lot is how much I wished I had known some of that theory earlier. But I don't think I have an answer one way or another. It's like; I'm not sure if having that knowledge earlier really would have helped me because I've also definitely been in...I'm just thinking about, like, when I was in college in lectures trying to absorb theories that made no sense to me because I had no, like, practical experience to connect it to. It's almost, like, maybe there is, like, that perfect time [laughs] where it is the most valuable for what you're doing. And I don't know. I kind of believe that there is a way to bridge that gap. JOËL: I mean, now we're kind of getting into an element of pedagogy. Do you sort of teach the theory first, and then show how to apply it to problems? Or do you show problems and then introduce bits of theory to help people get unstuck and maybe then cap it off by like, oh, these, like, five different, like, techniques I showed you to, like, solve five different problems, turns out they all fit in some grand unified theory? And, like, here's how the five things you thought were five different techniques are actually the same technique viewed from five different perspectives. Let me blow your mind. STEPHANIE: That's a Joël approach [laughter] to teaching if I've ever heard one. JOËL: I'm a huge fan of that approach. Going back to some of the, like, the functional programming ideas, I think that's one that really connected for me. I struggled to learn things like monads, and functors, and things like that. And I think, in my mind, these two approaches is like the Haskell school of teaching and the Elm school of teaching. Haskell will sort of say, "Hey, let me teach you about this theory of monads and all these things, and then, we'll look at some ways where that can be applied practically." Whereas Elm will say, "No, you don't need to know about this. Let's look at some practical problems. Oh, you've got null values you need to check. Here's how you can, like, handle nullability in a safe way. Oh, you've got a bunch of HTTP requests that might resolve in random order, and you want to, like, deal with them when they all come back. Here's some tips on how you can do that." And then, you have three or four things, and then, eventually, it just sort of lets you say, "Wait a minute, all of these problems are sort of all the same, and it turns out they all fit in some unified theory." And then, the light bulb goes off, and you're like, "Ooh, so now when I'm dealing with unknown blobs of Jason trying to parse data out of them, I'll bet I can use the same techniques I used for chaining HTTP requests to dig multiple dependent pieces of JSON." STEPHANIE: Yeah. And that's so satisfying, right? It really is kind of leveling up in that Galaxy Brain meme sort of way. JOËL: Yeah. And that's maybe to a certain extent even a value of idealism because if you build your system in such a way that it follows some of these patterns, then insights and intuitions that people have in one part of your code can then carry to other parts of your code, and that's incredibly powerful. STEPHANIE: Yeah. And I almost wonder because you also mentioned kind of where you end up on the spectrum is a function of your experience. I wonder if us, you know, being consultants and seeing patterns across many applications also kind of contributes to the striving for idealism [laughs]. JOËL: It's kind of both, right? Because there's very high incentive to ship pretty rapidly, especially if you're on a shorter engagement or if you're on a project that has a shorter timescale. But also, yes, because you've seen so many projects, you've seen how things can go wrong. Also, you've seen the same problem from 20 different perspectives that are all slightly different. And so, some of those broader patterns can start emerging in your head. STEPHANIE: Yeah, honestly, I think that's kind of the work that I enjoy the most in consulting because a lot of clients bring us on when they're like, "Hey, like, we've reached a point where our velocity has slowed down. Like, can you help us unstick our developers?" And that's actually when I've found that leaning on the theories and maybe a little bit of idealism is actually really useful because I'm kind of providing those tools to developers at this time when they need it. That's kind of why I have been saying trending idealism because I have found that particularly useful at work. JOËL: There's an element here of, like, looking at a bunch of different use cases and then finding some sort of unifying model or theory. And that's a word that I think programmers have a love-hate relationship with: Abstraction. I don't know about you, but designing abstractions is a lot of fun for me. I love designing abstractions. I have always loved designing abstractions. It's not always the best use of my time, and it's not always the best thing for a codebase. STEPHANIE: Ooh, okay, okay. This was a good transition. I hear you that, like, yeah, love-hate relationship. It's hard. That's kind of where I've ended up. It's really hard. And I think it's because it requires that creative thinking. JOËL: It requires that creative thinking. And then also, like, it requires you to sort of see more broadly, a more broad picture. What are the things that are connected, the things that are disconnected, even though they seem related? And, like, being able to sort of slice those similarities from each other. STEPHANIE: Yeah. I agree. And the interesting part is that, like, a lot of the time you just don't know yet. And you kind of have to come back to reality and admit that you don't know yet, you know, got to come back to earth, take a look around, and, yeah, you can go through the thought exercise of thinking [laughs] about all of the possibilities, and I imagine you could do that forever [laughs]. JOËL: I mean, that's why we have heuristics like the rule of three that says, "Don't abstract something out or attempt to DRY code until you've seen three use cases of it." So, maybe leave a little bit of duplication or a little bit of maybe not perfectly factored code until you have a couple of more examples. And the sort of real picture starts emerging a little bit more. STEPHANIE: So, I think we are kind of at this topic already, but was there a moment or was there something that kind of helped you realize, like, oh, I can't be in that space of imagining abstractions [laughs] forever when I have to deliver software? Like, what changed for you to be the, as you said yourself, recovering idealist and having to maybe employ some more pragmatic heuristics? JOËL: And I think, for me, it's partly being a consultant and being in a lot of projects and having that pressure to work with deadlines and sort of not having an infinite canvas to paint with, having to sort of fit some of my grand ideas into the reality of, we've got a week or two weeks to get this thing done, and also working with a team, and some ideas don't work well with every team. Every team is kind of at a different place. And abstractions sort of only serve you as well as they are useful to not only you but the team at large. So, if a team is not comfortable with a set of abstractions, or it's sort of, like, too far down a path, then that can be really challenging. And that's where something like the dry-rb set of gems, which has some really fun abstractions like a mental model for doing things, depending on the team, that can be a really heavy lift. And so, as much as I like those patterns, I might think long and hard before I try to push this on a whole team. STEPHANIE: Yeah, I kind of had to navigate a situation like that recently, where I was doing a code review, and I had left some suggestions about refactoring to encapsulate some responsibilities better. And then, I was like, oh, and then I noticed another thing that we could do to make that easier. And it, you know, definitely can start to spiral. And the author, you know, kind of responded to me and said, "Hey, like, I really appreciate these comments, but we are a bit tight on deadline for this project. So, is it okay if I, like, revisit this when we've delivered it?" And, you know, I was just like, "Yeah, it's totally up to you." At the end of the day, I want whoever's authoring this code to have, like, full agency about how they want to move forward. And it was really helpful for me to get that context of, like, oh, they're a bit tight on the deadline because then I can start to meet them where they're at. And maybe I can give some suggestions for moving towards that ideal state, but ones that are lower left, and that is still better than nothing. JOËL: That sounds awfully pragmatic. STEPHANIE: [laughs] JOËL: Moving in a positive direction, we're getting halfway. It's better than nothing. That's very pragmatic. STEPHANIE: Hmm. Wow. But it's pragmatically moving towards idealism. JOËL: [laughs] STEPHANIE: If that is even possible [laughs]. JOËL: Uh-huh. STEPHANIE: That's maybe the book that I'm going to write, not The Pragmatic Programmer, but The Pragmatically Idealistic Programmer [laughs]. JOËL: The Pragmatic Idealist. STEPHANIE: Ooh, yeah, I like that. Okay. Watch out for that book coming 2030 [laughter], written by me and Joël. JOËL: So, I think you brought up a really interesting point, which is the idea of pragmatism versus idealism when it comes to code review. Do you find that you think about these ideas differently when reviewing somebody else's code versus when you write your own? STEPHANIE: Oooh, yeah. I'm not sure exactly why, but definitely, when I'm reviewing someone else's code, I'm already in the headspace of, you know, I have some separation, right? Like, I'm not in the mode of thinking very hard [laughs] about what I'm creating. I'm just, like, in the editing kind of phase. And then, I can actually pull more from different theories and ideas, and I find that actually quite easier. When I'm writing my own code, it's just whatever comes out, right? And then, hopefully, I have the time to revisit it and give it a scan, and then start to integrate the, like, idealistic theories and the patterns that I would like to be using. But it definitely...for patterns that I feel a lot more confident about or more familiar with, they just come out mostly kind of oriented in that way if I have the time, or sometimes I will make the time, you know. I'll just say, "It's not done yet," because I know it can be better. I think that could be another, like, pragmatically idealist way of handling that. JOËL: [laughs] STEPHANIE: Right? It's just telling people, "I'm not done." [laughs] It's not done until I do at least give it an attempt. JOËL: So, it's kind of a two-phase thing when you're writing your own code, whereas it's only a single phase when you're reviewing somebody else's. STEPHANIE: Yeah. Yeah. But, like I said earlier, it's like, I also really believe that I don't want to impose any of my ideas [laughs] onto others. I really believe that people have to arrive at it on their own. So, it used to bother me a little bit more when I was just like, oh, but this way is better [laughs]. When people wouldn't get on board, I would be sad about it. But as long as I know that I, like, left that comment, then I can give myself a pat on the back for trying to move towards that ideal state. What about you [laughs]? JOËL: I think this is probably also where I'm, like, now a recovering idealist. There was a time where I would leave a ton of comments on someone's PR. I almost had a view of like, how can I help you get your PR to be the best it can possibly be? And sometimes, if you start with something that's very rough around the edges, you're leaving a lot of comments. And I've been that guy who's left 50 comments on a PR. In retrospect, I think that was not being a good teammate. STEPHANIE: Hmm. JOËL: So, I think maybe my mental model or my, like, goal for PR review has changed a little bit. It's less about how can I help you make your code the best it can possibly be? And a how can I help you get your code to mergeable? And it's possible that mergeable means best that it can possibly be, but that's usually not the case. So, I'm going to give you some feedback: some things that confuse me, maybe raise one or two patterns that are existing in the app that maybe you weren't aware of that you should maybe consider applying. Maybe I'll raise a couple of ideas that are new, but that apply here. And those might just be a, "Hey, let's just think about this. Maybe we don't want to do this in this PR, but maybe we want to look at them at some point. Or we should be thinking about this in a sort of rule of three situation. If we see this come up another time, maybe consider introducing a strategy pattern here, or maybe consider making this a value object, or separating these side effects from these pure behavior." But it's more of a dialogue about how can I help you get your PR to the point where it is mergeable? STEPHANIE: Yeah. Another thing I thought about just now is both are meaningful or, like, both can provide meaning in different ways, and people ascribe different amounts of meaning to both; where I had worked with someone, a client developer before, who was not super interested in doing any kind of refactoring or, like, any, you know, second passes for quality. Because, for him, like, he just wanted to ship, right? That was where he found meaning in his work. Whereas that actually made my work feel a lot more meaningless [chuckles] because I'm like, well, if we're just kind of hands on a keyboard, like robots shipping code, I don't know, that doesn't feel particularly motivating for me. You know, I do want to employ some of that craft a little bit more. JOËL: And, I guess, yeah, idealism versus pragmatism is also...it's a personal individual thing. There's an element where it's a team decision, or at least a sense of, like, how much quality do we need at this point in the life cycle of the project? And what are the areas where we particularly want to emphasize quality? What are our quality standards? And that's, to a certain extent, consensus among the team that it's individual members. And it's also coming from team leadership. STEPHANIE: Yeah. Yeah, exactly. I mentioned that, you know, just to, I think, shed a little bit of light that it's usually not personal, right [laughs]? There's that part of understanding that is really important to, yeah, like, keep building this shared world of writing software, and, hopefully, it should be meaningful for all of us. JOËL: I think a few takeaways that I have would be, one, the value of, like, theory and idealism. These things help you to become a better developer. They help you to spot patterns. It's probably good to sort of have in the background always be learning some new thing, whether that's learning a new set of patterns, or learning some mental models, thinking about, oh, the difference between side effects and pure code, learning about particular ways of structuring code. These are all things that are good to have in your back pocket to be able to apply to the code that you're doing, even if it's a sort of after-the-fact, hey, I've done a similar task three different times. Is there a broader principle? But then, also, take the time to really make sure that you're focusing on shipping code, and maybe that's learning to work in smaller chunks, working iteratively, learning to scope your work well. Because, in the end, delivering value is a thing that is something that we could all probably benefit from doing more of. And then, finally, taking some time to self-reflect, a little bit of self-awareness in this area. What are the aspects of pragmatism and idealism that you find personally meaningful? What are the elements that you think bring value to your work, to your team? And let that sort of guide you on your next code writing or PR review. STEPHANIE: On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
Joël shares his recent project challenge with Tailwind CSS, where classes weren't generating as expected due to the dynamic nature of Tailwind's CSS generation and pruning. Stephanie introduces a personal productivity tool, a "thinking cap," to signal her thought process during meetings, which also serves as a physical boundary to separate work from personal life. The conversation shifts to testing methodologies within Rails applications, leading to an exploration of testing philosophies, including developers' assumptions about database cleanliness and their impact on writing tests. Avdi's classic post on how to use database cleaner (https://avdi.codes/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/) RSpec change matcher (https://rubydoc.info/gems/rspec-expectations/RSpec%2FMatchers:change) Command/Query separation (https://martinfowler.com/bliki/CommandQuerySeparation.html) When not to use factories (https://thoughtbot.com/blog/speed-up-tests-by-selectively-avoiding-factory-bot) Why Factories? (https://thoughtbot.com/blog/why-factories) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I'm working on a new project, and this is a project that uses Tailwind CSS for its styling. And I ran into a bit of an annoying problem with it just getting started, where I was making changes and adding classes. And they were not changing the things I thought they would change in the UI. And so, I looked up the class in the documentation, and then I realized, oh, we're on an older version of the Tailwind Rails gem. So, maybe we're using...like, I'm looking at the most recent docs for Tailwind, but it's not relevant for the version I'm using. Turned out that was not the problem. Then I decided to use the Web Inspector and actually look at the element in my browser to see is it being overwritten somehow by something else? And the class is there in the element, but when I look at the CSS panel, it does not show up there at all or having any effects. And that got me scratching my head. And then, eventually, I figured it out, and it's a bit of a facepalm moment [laughs]. STEPHANIE: Oh, okay. JOËL: Because Tailwind has to, effectively, generate all of these, and it will sort of generate and prune the things you don't need and all of that. They're not all, like, statically present. And so, if I was using a class that no one else in the app had used yet, it hadn't gotten generated. And so, it's just not there. There's a class on the element, but there's no CSS definition tied to it, so the class does nothing. What you need to do is there's a rake task or some sort of task that you can run that will generate things. There's also, I believe, a watcher that you can run, some sort of, like, server that will auto-generate these for you in dev mode. I did not have that set up. So, I was not seeing that new class have any effect. Once I ran the task to generate things, sure enough, it worked. And Tailwind works exactly how the docs say they do. But that was a couple of hours of my life that I'm not getting back. STEPHANIE: Yeah, that's rough. Sorry to hear. I've also definitely gone down that route of like, oh, it's not in the docs. The docs are wrong. Like, do they even know what they're talking about? I'm going to fix this for everyone. And similarly have been humbled by a facepalm solution when I'm like, oh, did I yarn [laughs]? No, I didn't [laughs]. JOËL: Uh-huh. I'm curious, for you, when you have sort of moments where it's like the library is not behaving the way you think it is, is your default to blame yourself, or is it to blame the library? STEPHANIE: [laughs]. Oh, good question. JOËL: And the follow-up to that is, are you generally correct? STEPHANIE: Yeah. Yep, yep, yep. Hmm, I will say I externalize the blame, but I will try to at least do, like, the basic troubleshooting steps of restarting my server [laughter], and then if...that's as far as I'll go. And then, I'll be like, oh, like, something must be wrong, you know, with this library, and I turn to Google. And if I'm not finding any fruitful results, again, you know, one path could be, oh, maybe I'm not Googling correctly, but the other path could be, maybe I've discovered something that no one else has before. But to your follow-up question, I'm almost, like, always wrong [laughter]. I'm still waiting for the day when I, like, discover something that is an actual real problem, and I can go and open an issue [chuckles] and, hopefully, be validated by the library author. JOËL: I think part of what I heard is that your debugging strategy is basic, but it's not as basic as Joël's because you remember to restart the server [chuckles]. STEPHANIE: We all have our days [laughter]. JOËL: Next time. So, Stephanie, what is new in your world? STEPHANIE: I'm very excited to share this with you. And I recognize that this is an audio medium, so I will also describe the thing I'm about to show you [laughs]. JOËL: Oh, this is an object. STEPHANIE: It is an object. I got a hat [laughs]. JOËL: Okay. STEPHANIE: I'm going to put it on now. It's a cap that says "Thinking" on it [laughs] in, like, you know, fun sans serif font with a little bit of edge because the thinking is kind of slanted. So, it is designy, if you will. It's my thinking cap. And I've been wearing it at work all week, and I love it. As a person who, in meetings and, you know, when I talk to people, I have to process before I respond a lot of the time, but that has been interpreted as, you know, maybe me not having anything to say or, you know, people aren't sure if I'm, you know, still thinking or if it's time to move on. And sometimes I [chuckles], you know, take a long time. My brain is just spinning. I think another funny hat design would be, like, the beach ball, macOS beach ball. JOËL: That would be hilarious. STEPHANIE: Yeah. Maybe I need to, like, stitch that on the back of this thinking cap. Anyway, I've been wearing it at work in meetings. And then, when I'm just silently processing, I'll just point to my hat and signal to everyone what's [laughs] going on. And it's also been really great for the end of my work day because then I take off the hat, and because I've taken it off, that's, like, my signal, you know, I have this physical totem that, like, now I'm done thinking about work, and that has been working. JOËL: Oh, I love that. STEPHANIE: Yeah, that's been working surprisingly well to kind of create a bit more of a boundary to separate work thoughts and life thoughts. JOËL: Because you are working from home and so that boundary between professional life and personal life can get a little bit blurry. STEPHANIE: Yeah. I will say I take it off and throw it on the floor kind of dramatically [laughter] at the end of my work day. So, that's what's new. It had a positive impact on my work-life balance. And yeah, if anyone else has the problem of people being confused about whether you're still thinking or not, recommend looking into a physical thinking cap. JOËL: So, you are speaking at RailsConf this spring in Detroit. Do you plan to bring the thinking cap to the conference? STEPHANIE: Oh yeah, absolutely. That's a great idea. If anyone else is going to RailsConf, find me in my thinking cap [laughs]. JOËL: So, this is how people can recognize Bikeshed co-host Stephanie Minn. See someone walking around with a thinking cap. STEPHANIE: Ooh. thinkingbot? JOËL: Ooh. STEPHANIE: Have I just designed new thoughtbot swag [laughter]? We'll see if this catches on. JOËL: So, we were talking recently, and you'd mentioned that you were facing some really interesting dilemmas when it came to writing tests and particularly how tests interact with your test database. STEPHANIE: Yeah. So, I recently, a few weeks ago, joined a new client project and, you know, one of the first things that I do is start to run those tests [laughs] in their codebase to get a sense of what's what. And I noticed that they were taking quite a long time to get set up before I even saw any progress in terms of successes or failures. So, I was kind of curious what was going on before the examples were even run. And when I tailed the logs for the tests, I noticed that every time that you were running the test suite, it would truncate all of the tables in the test database. And that was a surprise to me because that's not a thing that I had really seen before. And so, basically, what happens is all of the data in the test database gets deleted using this truncation strategy. And this is one way of ensuring a clean slate when you run your tests. JOËL: Was this happening once at the beginning of the test suite or before every test? STEPHANIE: It was good that it was only running once before the test suite, but since, you know, in my local development, I'm running, like, a file at a time or sometimes even just targeting a specific line, this would happen on every run in that situation and was just adding a little bit of extra time to that feedback loop in terms of just making sure your code was working if that's part of your workflow. JOËL: Do you know what version of Rails this project was in? Because I know this was popular in some older versions of Rails as a strategy. STEPHANIE: Yeah. So, it is Rails 7 now, recently upgraded to Rails 7. It was on Rails 6 for a little while. JOËL: Very nice. I want to say that truncation is generally not necessary as of Rails...I forget if it's 5 or 6. But back in the day, specifically for what are now called system tests, the sort of, like, Capybara UI-driven browser tests, you had, effectively, like, two threads that were trying to access the database. And so, you couldn't have your test data wrapped in a transaction the way you would for unit tests because then the UI thread would not have access to the data that had been created in a transaction just for the test thread. And so, people would use tools like Database Cleaner to use a truncation strategy to clear out everything between tests to allow a sort of clean slate for these UI-driven feature specs. And then, I want to say it's Rails 5, it may have been Rails 6 when system tests were added. And one of the big things there was that they now could, like, share data in a transaction instead of having to do two separate threads and one didn't have access to it. And all of a sudden, now you could go back to transactional fixtures the way that you could with unit tests and really take advantage of something that's really nice and built into Rails. STEPHANIE: That's cool. I didn't know that about system tests and that kind of shift happening. I do think that, in this case, it was one of those situations where, in the past, the database truncation, in this case, particular using the Database Cleaner gem was necessary, and that just never got reassessed as the years went by. JOËL: That's one of the classic things, right? When you upgrade a Rails app over multiple versions, and sometimes you sort of get a new feature that comes in for free with the new version, and you might not be aware of it. And some of the patterns in the app just kind of keep going. And you don't realize, hey, this part of the app could actually be modernized. STEPHANIE: So, another interesting thing about this testing situation is that I learned that, you know, if you ran these tests, you would experience this truncation strategy. But the engineering team had also kind of played around with having a different test setup that didn't clean the database at all unless you opted into it. JOËL: So, your test database would just...each test would just keep writing to the database, but they're not wrapped in transactions. Or they are wrapped in transactions, but you may or may not have some additional data. STEPHANIE: The latter. So, I think they were also using the transaction strategy there. But, you know, there are some reasons that you would still have some data persisted across test runs. I had actually learned that the use transactional fixtures config for RSpec doesn't roll back any data that might have been created in a before context hook. JOËL: Yep, or a before all. Yeah, the transaction wraps the actual example, but not anything that happens outside of it. STEPHANIE: Yeah, I thought that was an interesting little gotcha. So, you know, now we had these, like, two different ways to run tests. And I was chatting with a client developer about how that came to be. And we then got into an interesting conversation about, like, whether or not we each expect a clean database in the first place when we write our tests or when we run our tests, and that was an area that we disagreed. And that was cool because I had not really, like, thought about like, oh, how did I even arrive at this assumption that my database would always be clean? I think it was just, you know, from experience having only worked in Rails apps of a certain age that really got onto the Database [laughs] Cleaner train. But it was interesting because I think that is a really big assumption to make that shapes how you then approach writing tests. JOËL: And there's kind of a couple of variations on that. I think the sort of base camp approach of writing Rails with fixtures, you just sort of have, for the most part, an existing set of data that's there that you maybe layer on a few extra things on. But there's base level; you just expect a bunch of data to exist in your test database. So, it's almost going off the opposite assumption, where you can always assume that certain things are already there. Then there's the other extreme of, like, you always assume that it's empty. And it sounds like maybe there's a position in the middle of, like, you never know. There may be something. There may not be something, you know, spin the wheel. STEPHANIE: Yeah. I guess I was surprised that it, you know, that was just a question that I never really asked myself prior to this conversation, but it could feel like different testing philosophies. But yeah, I was very interested in this, you know, kind of opinion that was a little bit different from mine about if you assume that your database, your test database, is not clean, that kind of perhaps nudges you in the direction of writing tests that are less coupled to the database if they don't need to be. JOËL: What does coupling to the database mean in this situation? STEPHANIE: So, I'm thinking about Rails tests that might be asserting on a change in database behavior, so the change matcher in RSpec is one that I see maybe sometimes used when it doesn't need to be used. And we're expecting, like, account to have changed the count of the number of records on it for a model have changed after doing some work, right? JOËL: And the change matcher from RSpec is one that allows you to not care whether there are existing records or not. It sort of insulates you from that. STEPHANIE: That's true. Though I guess I was thinking almost like, what if there was some return value to assert on instead? And would that kind of help you separate some side effects from methods that might be doing too much? And kind of when I start to see tests that have both or are asserting on something being returned, and then also something happening, that's one way of, like, figuring out what kind of coupling is going on inside this test. JOËL: It's the classic command-query separation principle from object-oriented design. STEPHANIE: I think another one that came to mind, another example, especially when you're talking about system tests, is when you might be using Capybara and you end up...maybe you're going through a flow that creates a record. But from the user perspective, they don't actually know what's going on at the database level. But you could assert that something was created, right? But it might be more realistic at that level of abstraction to be asserting some kind of visual element that had happened as a result of the flow that you're testing. JOËL: Yeah. I would, in fact, go so far as to say that asserting on the state of your database in a system test is an anti-pattern. System tests are sort of, by design, meant to be all about user behavior trying to mimic the experience of a user. And a user of a website is not going to be able to...you hope they're not able to SSH into [chuckles] your database and check the records that have been created. If they can, you've got another problem. STEPHANIE: I wonder if you could take this idea to the extreme, though. And do you think there is a world where you don't really test database-level concerns at all if you kind of believe this idea that it doesn't really matter what the state of it should be? JOËL: I guess there's a few different things on, like, what it matters about the state of it because you are asserting on its state sort of indirectly in a sort of higher level integration test. You're asserting that you see certain things show up on the screen in a system test. And maybe you want to say, "I do certain tasks, and then I expect to see three items in an unordered list." Those three items probably come from the database, although, you know, you could have it where they come from an API or something like that. So, the database is an implementation level. But if you had random data in your database, you might, in some tests, have four items in the list, some tests have five. And that's just going to be a flaky test, and that's going to be incredibly painful. So, while you're not asserting on the database, having control over it during sort of test setup, I think, does impact the way you assert. STEPHANIE: Yeah, that makes sense. I was suddenly just thinking about, like, how that exercise can actually tell you perhaps, like, when it is important to, in your test setup, be persisting real records as opposed to how much you can get away with, like, not interacting with it because, like, you aren't testing at that integration level. JOËL: That brings up a good point because a lot of tests probably you might need models, but you might not need persisted models to interact with them, if you're testing a method on a model that just does things based off its internal state and not any of the ActiveRecord database queries, or if you have some other service or something that consumes a model that doesn't necessarily need to query. There's a classic blog post on the thoughtbot blog about when you should not reuse. There's a classic blog post on the thoughtbot blog about when not to use FactoryBot. And, you know, we are the makers of FactoryBot. It helps set up records in your database for testing. And people love to use it all the time. And we wrote an article about why, in many cases, you don't need to create something into the database. All you need is just something in memory, and that's going to be much faster than using FactoryBot because talking to the database is expensive. STEPHANIE: Yeah, and I think we can see that in the shift from even, like, fixtures to factories as well, where test data was only persisted as needed and as needed in individual tests, rather than seeding it and having all of those records your entire test run. And it's cool to see that continuing, you know, that idea further of like, okay, now we have this new, popular tool that reduce some of that. But also, in most cases, we still don't need...it's still too much. JOËL: And from a performance perspective, it's a bit of a see-saw in that fixtures are a lot faster because they get inserted once at the beginning of your test run. So, a SQL execution at the beginning of a test run and then every test after that is just doing its thing: maybe creating a record inside of a transaction, maybe not creating any records at all. And so, it can be a lot faster as opposed to using FactoryBot where you're creating records one at a time. Every create call in a test is a round trip to the database, and those are expensive. So, FactoryBot tests tend to be more expensive than those that rely on fixtures. But you have the advantage of more control over what data is present and sort of more locality because you can see what has been created at the test level. But then, if you decide, hey, this is a test where I can just create records in memory, that's probably the best of all worlds in that you don't need anything created ahead with fixtures. You also don't need anything to be inserted using FactoryBot because you don't even need the database for this test. STEPHANIE: I'm curious, is that the assumption that you start with, that you don't need a persisted object when you're writing a basic unit test? JOËL: I think I will as much as possible try not to need to persist and only if necessary use persist records. There are strategies with FactoryBot that will allow you to also, like, build stubbed or just build in memory. So, there's a few different variations that will, like, partially do things for you. But oftentimes, you can just new up an object, and that's what I will often start with. In many cases, I will already know what I'm trying to do. And so, I might not go through the steps of, oh, new up an object. Oh no, I'm getting a I can't do the thing I need to do. Now, I need to write to the database. So, if I'm testing, let's say, an ActiveRecord scope that's filtering down a series of records, I know that's a wrapper around a database query. I'm not going to start by newing up some records and then sort of accidentally discovering, oh yeah, it does write to the database because that was pretty clear to me from the beginning. STEPHANIE: Yeah. Like, you have your mental shortcuts that you do. I guess I asked that question because I wonder if that is a good heuristic to share with maybe developers who are trying to figure out, like, should they create persisted records or, you know, use just regular instance in memory or, I don't know, even [laughs] use, like, a double [laughs]? JOËL: Yeah, I've done that quite a bit as well. I would say maybe my heuristic is, is the method under test going to need to talk to the database? And, you know, I may or may not know that upfront because if I'm test driving, I'm writing the test first. So, sometimes, maybe I don't know, and I'll start with something in memory and then realize, oh, you know, I do need to talk to the database for this. And this is for unit tests, in particular. For something more like an integration test or a system test that might require data in the database, system tests almost always do. You're not interacting with instances in memory when you're writing a system test, right? You're saying, "Given the database state is this when I visit this URL and do these things, this page reacts in such and such a way." So, system tests always write to the database to start with. So, maybe that's my heuristic there. But for unit tests, maybe think a little bit about does your method actually need to talk to the database? And maybe even almost give yourself a challenge. Can I get away with not talking to the database here? STEPHANIE: Yeah, I like that because I've certainly seen a lot of unit tests that are integration tests in disguise [laughs]. JOËL: Isn't that the truth? So, we kind of opened up this conversation with the idea of there are different ways to manage your database in terms of, do you clean or not clean before a test run? Where did you end up on this particular project? STEPHANIE: So, I ended up with a currently open PR to remove the need to truncate the database on each run of the test suite and just stick with the transaction for each example strategy. And I do think that this will work for us as long as we decide we don't want to introduce something like fixtures, even though that is actually also a discussion that's still in the works. But I'm hoping with this change, like, right now, I can help people start running faster tests [chuckles]. And should we ever introduce fixtures down the line, then we can revisit that. But it's one of those things that I think we've been living with this for too long [laughs]. And no one ever questioned, like, "Oh, why are we doing this?" Or, you know, maybe that was a need, however many years ago, that just got overlooked. And as a person new to the project, I saw it, and now I'm doing something about it [laughs]. JOËL: I love that new person energy on a project and like, "Hey, we've got this config thing. Did you know that we didn't need this as of Rails 6?" And they're like, "Oh, I didn't even realize that." And then you add that, and it just moves you into the future a little bit. So, if I understand the proposed change, then you're removing the truncation strategy, but you're still going to be in a situation where you have a clean database before each test because you're wrapping tests in transactions, which I think is the default Rails behavior. STEPHANIE: Yeah, that's where we're at right now. So, yeah, I'm not sure, like, how things came to be this way, but it seemed obvious to me that we were kind of doing this whole extra step that wasn't really necessary, at least at this point in time. Because, at least to my knowledge [laughs], there's no data being seeded in any other place. JOËL: It's interesting, right? When you have a situation where this was sort of a very popular practice for a long time, a lot of guides mentioned that. And so, even though Rails has made changes that mean that this is no longer necessary, there's still a long tail of apps that will still have this that may be upgraded later, and then didn't drop this, or maybe even new apps that got created but didn't quite realize that the guide they were following was outdated, or that a best practice that was in their head was also outdated. And so, you have a lot of apps that will still have these sort of, like, relics of the past. And you're like, "Oh yeah, that's how we used to do things." STEPHANIE: So yeah, thanks, Joël, for going on this journey with me in terms of, you know, reassessing my assumptions about test databases. I'm wondering, like, if this is common, how other people, you know, approach what they expect from the test database, whether it be totally clean or have, you know, any required data for common flows and use cases of your system. But it does seem that little in between of, like, maybe it is using transactions to reset for each example, but then there's also some persistence that's happening somewhere else that could be a little tricky to manage. JOËL: On that note, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeeeee!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at: referrals@thoughtbot.com with any questions.
Joël talks about his difficulties optimizing queries in ActiveRecord, especially with complex scopes and unions, resulting in slow queries. He emphasizes the importance of optimizing subqueries in unions to boost performance despite challenges such as query duplication and difficulty reusing scopes. Stephanie discusses upgrading a client's app to Rails 7, highlighting the importance of patience, detailed attention, and the benefits of collaborative work with a fellow developer. The conversation shifts to Ruby's reduce method (inject), exploring its complexity and various mental models to understand it. They discuss when it's preferable to use reduce over other methods like each, map, or loops and the importance of understanding the underlying operation you wish to apply to two elements before scaling up with reduce. The episode also touches on monoids and how they relate to reduce, suggesting that a deep understanding of functional programming concepts can help simplify reduce expressions. Rails 7 EXPLAIN ANALYZE (https://www.bigbinary.com/blog/rails-7-1-adds-options-to-activerecord-relation-explain) Blocks, symbol to proc, and symbols arguments for reduce (https://thoughtbot.com/blog/blocks-procs-and-enumerable) Ruby tally (https://medium.com/@baweaver/ruby-2-7-enumerable-tally-a706a5fb11ea) Performance considerations for reduce in JavaScript (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#when_to_not_use_reduce) Persistant data structures (https://www.youtube.com/watch?v=gTClDj9Zl1g) Avoid passing a block to map and reduce (https://thoughtbot.com/blog/avoid-putting-logic-in-map-blocks) Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire (https://ris.utwente.nl/ws/portalfiles/portal/6142049/meijer91functional.pdf) monoids (https://blog.ploeh.dk/2017/10/06/monoids/) iteration anti-patterns (https://thoughtbot.com/blog/iteration-as-an-anti-pattern) Joël's talk on “constructor replacement” (https://www.youtube.com/watch?v=dSMB3rsufC8) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I've been doing a bunch of fiddling with query optimization this week, and I've sort of run across an interesting...but maybe it's more of an interesting realization because it's interesting in the sort of annoying way. And that is that, using ActiveRecord scopes with certain more complex query pieces, particularly unions, can lead to queries that are really slow, and you have to rewrite them differently in a way that's not reusable in order to make them fast. In particular, if you have sort of two other scopes that involve joins and then you combine them using a union, you're unioning two sort of joins. Later on, you want to change some other scope that does some wares or something like that. That can end up being really expensive, particularly if some of the underlying tables being joined are huge. Because your database, in my case, Postgres, will pull a lot of this data into the giant sort of in-memory table as it's, like, building all these things together and to filter them out. And it doesn't have the ability to optimize the way it would on a more traditional relation. A solution to this is to make sure that the sort of subqueries that are getting unioned are optimized individually. And that can mean moving conditions that are outside the union inside. So, if I'm chaining, I don't know, where active is true on the outer query; on the union itself, I might need to move that inside each of the subqueries. So, now, in the two or three subqueries that I'm unioning, each of them needs to have a 'where active true' chained on it. STEPHANIE: Interesting. I have heard this about using ActiveRecord scopes before, that if the scopes are quite complex, chaining them might not lead to the most performant query. That is interesting. By optimizing the subqueries, did you kind of change the meaning of them? Was that something that ended up happening? JOËL: So, the annoying thing is that I have a scope that has the union in it, and it does some things sort of on its own. And it's used in some places. There are also other places that will try to take that scope that has the union on it, chain some other scopes that do other joins and some more filters, and that is horribly inefficient. So, I need to sort of rewrite the sort of subqueries that get union to include all these new conditions that only happen in this one use case and not in the, like, three or four others that rely on that union. So, now I end up with some, like, awkward query duplication in different call sites that I'm not super comfortable about, but, unfortunately, I've not found a good way to make this sort of nicely reusable. Because when you want to chain sort of more things onto the union, you need to shove them in, and there's no clean way of doing that. STEPHANIE: Yeah. I think another way I've seen this resolved is just writing it in SQL if it's really complex and it becoming just a bespoke query. We're no longer trying to use the scope that could be reusable. JOËL: Right. Right. In this case, I guess, I'm, like, halfway in between in that I'm using the ActiveRecord DSL, but I am not reusing scopes and things. So, I sort of have the, I don't know, naive union implementation that can be fine in all of the simpler use cases that are using it. And then the query that tries to combine the union with some other fancy stuff it just gets its own separate implementation different than the others that it has optimized. So, there are sort of two separate paths, two separate implementations. I did not drop down to writing raw SQL because I could use the ActiveRecord DSL. So, that's what I've been working with. What's new in your world this week? STEPHANIE: So, a couple of weeks ago, I think, I mentioned that I was working on a Rails 7 upgrade, and we have gotten it out the door. So, now the client application I'm working on is on Rails 7, which is exciting for the team. But in an effort to make the upgrade as incremental as possible, we did, like, back out of a few of the new application config changes that would have led us down a path of more work. And now we're kind of following up a little bit to try to turn some of those configs on to enable them. And it was very exciting to kind of, like, officially be on Rails 7. But I do feel like we tried to go for, like, the minimal amount of work possible in that initial big change. And now we're having to kind of backfill a little bit on some of the work that was a little bit more like, oh, I'm not really sure, like, how big this will end up being. And it's been really interesting work, I think, because it requires, like, two different mindsets. Like, one of them is being really patient and focused on tedious work. Like, okay, what happens when we enable this config option? Like, what changes? What errors do we see? And then having to turn it back off and then go in and fix them. But then another, I think, like, headspace that we have to be in is making decisions about what to do when we come to a crossroads around, like, okay, now that we are starting to see all the changes that are coming about from enabling this config, is this even what we want to do? And it can be really hard to switch between those two modes of thinking. JOËL: Yeah. How do you try to balance between the two? STEPHANIE: So, I luckily have been pairing with another dev, and I've actually found that to be really effective because he has, I guess, just, like, a little bit more of that patience to do the more tedious, mundane [laughs] aspects of, like, driving the code changes. And I have been riding along. But then I can sense, like, once he gets to the point of like, "Oh, I'm not sure if we should keep going down this road," I can step in a little bit more and be like, "Okay, like, you know, I've seen us do this, like, five times now, and maybe we don't want to do that." Or maybe being like, "Okay, we don't have a really clear answer, but, like, who can we talk to to find out a little bit more or get their input?" And that's been working really well for me because I've not had a lot of energy to do more of that, like, more manual or tedious labor [chuckles] that comes with working on that low level of stuff. So yeah, I've just been pleasantly surprised by how well we are aligning our superpowers. JOËL: To use some classic business speech, how does it feel to be in the future on Rails 7? STEPHANIE: Well, we're not quite up, you know, up to modern days yet, but it does feel like we're getting close. And, like, I think now we're starting to entertain the idea of, like, hmm, like, could we be even on main? I don't think it's really going to happen, but it feels a little bit more possible. And, in general, like, the team thinks that that could be, like, really exciting. Or it's easier, I think, once you're a little bit more on top of it. Like, the worst is when you get quite behind, and you end up just feeling like you're constantly playing catch up. It just feels a little bit more manageable now, which is good. JOËL: I learned this week a fun fact about Rails 7.1, in particular, which is that the analyze method on ActiveRecord queries, which allowed you to sort of get SQL EXPLAIN statements, now has the ability to pass in a couple of extra parameters. So, there are symbols, and you can pass in things like analyze or verbose, which allows you to get sort of more data out of your EXPLAIN query, which can be quite nice when you're debugging for performance. So, if you're in the future and you're on Rails 7.1 and you want sort of the in-depth query plans, you don't need to copy the SQL into a Postgres console to get access to the sort of fully developed EXPLAIN plan. You can now do it by passing arguments to EXPLAIN, which I'm very happy for. STEPHANIE: That's really nice. JOËL: So, we've mentioned before that we have a developers' channel on Slack here at thoughtbot, and there's all sorts of fun conversations that happen there. And there was one recently that really got me interested, where people were talking about Ruby's reduce method, also known as inject. And it's one of those methods that's kind of complicated, or it can be really confusing. And there was a whole thread where people were talking about different mental models that they had around the reduce method and how they sort of understand the way it works. And I'd be curious to sort of dig into each other's mental models of that today. To kick us off, like, how comfortable do you feel with Ruby's reduce method? And do you have any mental models to kind of hold it in your head? STEPHANIE: Yeah, I think reduce is so hard to wrap your head around, or it might be one of the most difficult, I guess, like, functions a new developer encounters, you know, in trying to understand the tools available to them. I always have to look up the order of the arguments [laughs] for reduce. JOËL: Every time. STEPHANIE: Yep. But I feel like I finally have a more intuitive sense of when to use it. And my mental model for it is collapsing a collection into one value, and, actually, that's why I prefer calling it reduce rather than the inject alias because reduce kind of signals to me this idea of going from many things to one canonical thing, I suppose. JOËL: Yeah, that's a very common use case for reducing, and I guess the name itself, reducing, kind of has almost that connotation. You're taking many things, and you're going to reduce that down to a single thing. STEPHANIE: What was really interesting to me about that conversation was that some people kind of had the opposite mental model where it made a bit more sense for them to think about injecting and, specifically, like, the idea of the accumulator being injected with values, I suppose. And I kind of realized that, in some ways, they're kind of antonyms [chuckles] a little bit because if you're focused on the accumulator, you're kind of thinking about something getting bigger. And that kind of blew my mind a little bit when I realized that, in some ways, they can be considered opposites. JOËL: That's really fascinating. It is really interesting, I think, the way that we can take the name of a method and then almost, like, tell ourselves a story about what it does that then becomes our way of remembering how this method works. And the story we tell for the same method name, or in this case, maybe there's a few different method names that are aliases, can be different from person to person. I know I tend to think of inject less in terms of injecting things into the accumulator and more in terms of injecting some kind of operator between every item in the collection. So, if we have an array of numbers and we're injecting plus, in my mind, I'm like, oh yeah, in between each of the numbers in the collection, just inject a little plus sign, and then do the math. We're summing all the items in the collection. STEPHANIE: Does that still hold up when the operator becomes a little more complex than just, you know, like, a mathematical operator, like, say, a function? JOËL: Well, when you start passing a block and doing custom logic, no, that mental model kind of falls apart. In order for it to work, it also has to be something that you can visualize as some form of infix operator, something that goes between two values rather than, like, a method name, which is typically in prefix position. I do want to get at this idea, though: the difference between sort of the block version versus passing. There are ways where you can just do a symbol, and that will call a method on each of the items. Because I have a bit of a hot take when it comes to writing reduce blocks or inject blocks that are more accessible, easier to understand. And that is, generally, that you shouldn't, or more specifically, you should not have a big block body. In general, you should be either using the symbol version or just calling a method within the block, and it's a one-liner. Which means that if you have some complex behavior, you need to find a way to move that out of this sort of collection operation and into instance methods on the objects being iterated. STEPHANIE: Hmm, interesting. By one-liner do you mean passing the name of the method as a proc or actually, like, having your block that then calls the method? Because I can see it becoming even simpler if you have already extracted a method. JOËL: Yeah, if you can do symbol to proc, that's amazing, or even if you can use just the straight-up symbol way of invoking reduce or inject. That typically means you have to start thinking about the types of objects that you are working with and what methods can be moved onto them. And sometimes, if you're working with hashes or something like that that don't have domain methods for what you want, that gets really awkward. And so, then maybe that becomes maybe a hint that you've got some primitive obsession happening and that this hash that sort of wants a domain object or some kind of domain method probably should be extracted to its own object. STEPHANIE: I'll do you with another kind of spicy take. I think, in that case, maybe you don't want a reduce at all. If you're starting to find that...well, okay, I think it maybe could depend because there could be some very, like, domain-specific logic. But I have seen reduce end up being used to transform the structure of the initial collection when either a different higher-order function can be used or, I don't know, maybe you're just better off writing it with a regular loop [laughs]. It could be clearer that way. JOËL: Well, that's really interesting because...so, you mentioned the idea that we could use a different higher-order function, and, you know, higher-order function is that fancy term, just a method that accepts another method as an argument. In Ruby, that just means your method accepts a block. Reduce can be used to implement pretty much the entirety of enumerable. Under the hood, enumerable is built in terms of each. You could implement it in terms of reduce. So, sometimes it's easy to re-implement one of the enumerable methods yourself, accidentally, using reduce. So, you've written this, like, complex reduce block, and then somebody in review comes and looks at it and is like, "Hey, you realize that's just map. You've just recreated map. What if we used map here?" STEPHANIE: Yeah. Another one I've seen a lot in JavaScript land where there are, you know, fewer utility functions is what we now have in Ruby, tally. I feel like that was a common one I would see a lot when you're trying to count instances of something, and I've seen it done with reduce. I've seen it done with a for each. And, you know, I'm sure there are libraries that actually provide a tally-like function for you in JS. But I guess that actually makes me feel even more strongly about this idea that reduce is best used for collapsing something as opposed to just, like, transforming a data structure into something else. JOËL: There's an interesting other mental model for reduce that I think is hiding under what we're talking about here, and that is the idea that it is a sort of mid-level abstraction for dealing with collections, as opposed to something like map or select or some of those other enumerable helpers because those can all be implemented in terms of reduce. And so, in many cases, you don't need to write the reduce because the library maintainer has already used reduce or something equivalent to build these higher-level helpers for you. STEPHANIE: Yeah, it's kind of in that weird point between, like, very powerful [chuckles] so that people can start to do some funky things with it, but also sometimes just necessary because it can feel a little bit more concise that way. JOËL: I've done a fair amount of functional programming in languages like Elm. And there, if you're building a custom data structure, the sort of lowest-level way you have of looping is doing a recursion, and recursions are messy. And so, what you can do instead as a library developer is say, "You know what, I don't want to be writing recursions for all of these." I don't know; maybe I'm building a tree library. I don't want to write a recursion for every different function that goes over trees if I want to map or filter or whatever. I'm going to write reduce using recursion, and then everything else can be written in terms of reduce. And then, if people want to do custom things, they don't need to recurse over my tree. They can use this reduce function, which allows them to do most of the traversals they want on the tree without needing to touch manual recursion. So, there's almost, like, a low-level, mid-level, high-level in the library design, where, like, lowest level is recursion. Ideally, nobody touches that. Mid-level, you've got reducing that's built out on top of recursion. And then, on top of that, you've got all sorts of other helpers, like mapping, like filtering, things like that. STEPHANIE: Hmm. I'm wondering, do you know of any performance considerations when it comes to using reduce built off a recursion? JOËL: So, one of the things that can be really nice is that writing a recursion yourself is dangerous. It's so easy to, like, accidentally introduce Stack Overflow. You could also write a really inefficient one. So, ideally, what you do is that you write a reduce that is safe and that is fast. And then, everybody else can just use that to not have to worry about the sort of mechanics of traversing the collection. And then, just use this. It already has all of the safety and speed features built in. You do have to be careful, though, because reduce, by nature, traverses the entire collection. And if you want to break out early of something expensive, then reduce might not be the tool for you. STEPHANIE: I was also reading a little bit about how, in JavaScript, a lot of developers like to stick to that idea of a pure function and try to basically copy the entire accumulator for every iteration and creating a new object for that. And that has led to some memory issues as well. As opposed to just mutating the accumulator, having, especially when you, you know, are going through a collection, like, really large, making that copy every single time and creating, yeah [chuckles], just a lot of issues that way. So, that's kind of what prompted that question. JOËL: Yeah, that can vary a lot by language and by data structure. In more functional languages that try to not mutate, they often have this idea of what they call persistent data structures, where you can sort of create copies that have small modifications that don't force you to copy the whole object under the hood. They're just, like, pointers. So, like, hey, we, like, are the same as this other object, but with this extra element added, or something like that. So, if you're growing an array or something like that, you don't end up with 10,000 copies of the array with, like, a new element every time. STEPHANIE: Yeah, that is interesting. And I feel like trying to adopt different paradigms for different tools, you know, is not always as straightforward as some wish it were [laughs]. JOËL: I do want to give a shout-out to an academic paper that is...it is infamously dense. The title of it is Functional Programming with Bananas, Lenses, and Barbed Wire. STEPHANIE: It doesn't sound dense; it sounds fun. Well, I don't about barbed wire. JOËL: It sounds fun, right? STEPHANIE: Yeah, but certainly quirky [laughs]. JOËL: It is incredibly dense. And they've, like, created this custom math notation and all this stuff. But the idea that they pioneered there is really cool, this idea that kind of like I was talking about sort of building libraries in different levels. Their idea is that recursion is generally something that's unsafe and that library and language designers should take care of all of the recursion and instead provide some of these sort of mid-level helper methods to do things. Reducing is one of them, but their proposal is that it's not the only one. There's a whole sort of family of similar methods that are there that would be useful in different use cases. So, reduce allows you to sort of traverse the whole thing. It does not allow you to break out early. It does not allow you to keep sort of track of a sort of extra context element if you want to, like, be traversing a collection but have a sort of look forward, look back, something like that. So, there are other variations that could handle those. There are variations that are the opposite of reduce, where you're, like, inflating, starting from a few parameters and building a collection out of them. So, this whole concept is called recursion schemes, and you can get, like, really deep into some theory there. You'll hear fancy words like catamorphisms and anamorphisms. There's a whole world to explore in that area. But at its core, it's this idea that you can sort of slice up things into this sort of low-level recursion, mid-level helpers, and then, like, kind of userland helpers built on top of that. STEPHANIE: Wow. That is very intense; it sounds like [chuckles]. I'm happy not to ever have to write a recursion ever again, probably [laughs]. Have you ever, as just a web developer in your day-to-day programming, found a really good use case for dropping down to that level? Or are you kind of convinced that, like, you won't really ever need to? JOËL: I think it depends on the paradigm of the language you're working in. In Ruby, I've very rarely needed to write a recursion. In something like Elm, I've had to do that, eh, not infrequently. Again, it depends, like, if I'm doing more library-esque code versus more application code. If I'm writing application code and I'm using an existing, let's say, tree library, then I typically don't need to write a recursion because they've already written traversals for me. If I'm making my own and I have made my own tree libraries, then yes, I'm writing recursions myself and building those traversals so that other people don't have to. STEPHANIE: Yeah, that makes sense. I'd much rather someone who has read that paper [laughs] write some traversal methods for me. JOËL: And, you know, for those who are curious about it, we will put a link to this paper in the description. So, we've talked about a sort of very academic mental model way of thinking about reducing. I want to shift gears and talk about one that I have found is incredibly practical, and that is the idea that reduce is a way to scale an operation that works on two objects to an operation that works on sort of an unlimited number of objects. To make it more concrete, take something like addition. I can add two numbers. The plus operator allows me to take one number, add another, get a sum. But what if I want to not just add two numbers? I want to add an arbitrary number of numbers together. Reduce allows me to take that plus operator and then just scale it up to as many numbers as I want. I can just plug that into, you know, I have an array of numbers, and I just call dot reduce plus operator, and, boom, it can now scale to as many numbers as I want, and I can sum the whole thing. STEPHANIE: That dovetails quite nicely with your take earlier about how you shouldn't pass a block to reduce. You should extract that into a method. Don't you think? JOËL: I think it does, yes. And then maybe it's, like, sort of two sides of a coin because I think what this leads to is an approach that I really like for reducing because sometimes, you know, here, I'm starting with addition. I'm like, oh, I have addition. Now, I want to scale it up. How do I do that? I can use reduce. Oftentimes, I'm faced with sort of the opposite problem. I'm like, oh, I need to add all these numbers together. How do I do that? I'm like, probably with a reduce. But then I start writing the block, and, like, I get way too into my head about the accumulator and what's going to happen. So, my strategy for writing reduce expressions is to, instead of trying to figure out how to, like, do the whole thing together, first ask myself, how do I want to combine any two elements that are in the array? So, I've got an array of numbers, and I want to sum them all. What is the thing I need to do to combine just two of those? Forget the array. Figure that out. And then, once I have that figured out, maybe it's an existing method like plus. Maybe it's a method I need to define on it if it's a custom object. Maybe it's a method that I write somewhere. Then, once I have that, I can say, okay, I can do it for two items. Now, I'm going to scale it up to work for the whole array, and I can plug it into reduce. And, at that point, the work is already basically done, so I don't end up with a really complex block. I don't end up, like, almost ending in, like, a recursive infinite loop in my head because I do that. STEPHANIE: [laughs]. JOËL: So, that approach of saying, start by figuring out what is the operation you want to do to combine two elements, and then use reduce as a way to scale that to your whole array is a way that I've used to keep things simple in my mind. STEPHANIE: Yeah, I like that a lot as a supplement to the model I shared earlier because, for me, when I think about reducing as, like, collapsing into a value, you kind of are just like, well, okay, I start with the collection, and then somehow I get to my single value. But the challenge is figuring out how that happens [laughs], like, the magic that happens in between that. And I think another alias that we haven't mentioned yet for reduce that is used in a lot of other languages is fold. And I actually like that one a lot, and I think it relates to your mental model. Because when I think about folding, I'm picturing folding up a paper like an accordion. And you have to figure out, like, what is the first fold that I can make? And just repeating that over and over to get to your little stack of accordion paper [laughs]. And if you can figure out just that first step, then you pretty much, like, have the recipe for getting from your initial input to, like, your desired output. JOËL: Yeah. I think fold is interesting in that some languages will make a distinction between fold and reduce. They will have both. And typically, fold will require you to pass an initial value, like a starting accumulator, to start it off. Whereas reduce will sort of assume that your array can use the first element of the array as the first accumulator. STEPHANIE: Oh, I just came up with another visual metaphor for this, which is, like, folding butter into croissant pastry when the butter is your initial value [laughs]. JOËL: And then the crust is, I guess, the elements in the array. STEPHANIE: Yeah. Yeah. And then you get a croissant out of it [laughs]. Don't ask me how it gets to a perfectly baked, flaky, beautiful croissant, but somehow that happens [laughs]. JOËL: So, there's an interesting sort of subtlety here that I think happens because there are sort of two slightly different ways that you can interact with a reduce. Sometimes, your accumulator is of the same type as the elements in your array. So, you're summing an array of numbers, and your accumulator is the sum, but each of the elements in the array are also numbers. So, it's numbers all the way through. And sometimes, your accumulator has a different type than the items in the array. So, maybe you have an array of words, and you want to get the sum of all of the characters and all the words. And so, now your accumulator is a number, but each of the items in the array are strings. STEPHANIE: Yeah, that's an interesting distinction because I think that's where you start to see the complex blocks being passed and reduced. JOËL: The complex blocks, definitely; I think they tend to show up when your accumulator has a different type than the individual items. So, maybe that's, like, a slightly more complicated use case. Oftentimes, too, the accumulator ends up being some, like, more complex, like, hash or something that maybe would really benefit from being a custom object. STEPHANIE: I've never done that before, but I can see why that would be really useful. Do you have an example of when you used a custom object as the accumulator? JOËL: So, I've done it for situations where I'm working with objects that are doing tally-like operations, but I'm not doing just a generic tally. There's some domain-specific stuff happening. So, it's some sort of aggregate counter on multiple dimensions that you can use, and that can get really ugly. And you can either do it with a reduce or you can have some sort of, like, initial version of the hash outside and do an each and mutate the hash and stuff like that. All of these tend to be a little bit ugly. So, in those situations, I've often created some sort of custom object that has some instance methods that allow to sort of easily add new elements to it. STEPHANIE: That's really interesting because now I'm starting to think, what if the elements in the collection were also a custom object? [chuckles] And then things could, I feel like, could be really powerful [laughs]. JOËL: There's often a lot of value, right? Because if the items in the collection are also a custom object, you can then have methods on them. And then, again, the sort of complexity of the reduce can sort of, like, fade away because it doesn't own any of the logic. All it does is saying, hey, there's a thing you can do to combine two items. Let's scale it up to work on a collection of items. And now you've sort of, like, really simplified what logic is actually owned inside the reduce. I do want to shout out for those listeners who are theory nerds and want to dig into this. When you have a reduce, and you've got an operation where all the values are of the same type, including the accumulator, typically, what you've got here is some form of monoid. It may be a semigroup. So, if you want to dig into some theory, those are the words to Google and to go a deep dive on. The main thing about monoids, in particular, is that monoids are any objects that have both a sort of a base case, a sort of empty version of themselves, and they have some sort of combining method that allows you to combine two values of that type. If your object has these things and follows...there's a few rules that have to be true. You have a monoid. And they can then be sort of guaranteed to be folded nicely because you can plug in their base case as your initial accumulator. And you can plug in their combining method as just the value of the block, and everything else just falls into place. A classic here is addition for numbers. So, if you want to add two numbers, your combining operator is a plus. And your sort of empty value is a zero. So, you would say, reduce initial value is zero, array of numbers. And your block is just plus, and it won't sum all of the numbers. You could do something similar with strings, where you can combine strings together with plus, and, you know, your empty string is your base case. So, now you're doing sort of string concatenation over arbitrary number of strings. Turns out there's a lot of operations that fall into that, and you can even define some of those on your custom object. So, you're like, oh, I've got a custom object. Maybe I want some way of, like, combining two of them together. You might be heading in the direction of doing something that is monoidal, and if so, that's a really good hint to know that it can sort of, like, just drop into place with a fold or a reduce and that that is a tool that you have available to you. STEPHANIE: Yeah, well, I think my eyes, like, widened a little bit when you first dropped the term monoid [laughs]. I do want to spend the last bit of our time talking about when not to use reduce, and, you know, we did talk a lot about recursion. But when do you think a regular old loop will just be enough? JOËL: So, you're suggesting when would you want to use something like an each rather than a reduce? STEPHANIE: Yeah. In my mind, you know, you did offer, like, a lot of ways to make reduce simpler, a lot of strategies to end up with some really nice-looking syntax [chuckles], I think. But, oftentimes, I think it can be equally as clear storing your accumulator outside of the iteration and that, like, is enough for me to understand. And reduce takes a little bit of extra overhead to figure out what I'm looking at. Do you have any thoughts about when you would prefer to do that? Or do you think that you would usually reach for something else? JOËL: Personally, I generally don't like the pattern of using each to iterate over a collection and then mutate some external accumulator. That, to me, is a bit of a code smell. It's a sign that each is not quite powerful enough to do the thing that I want to do and that I'm probably needing some sort of more specialized form of iteration. Sometimes, that's reduce. Oftentimes, because each can suffer from the same problem you mentioned from reduce, where it's like, oh, you're doing this thing where you mutate an external accumulator. Turns out what you're really doing is just map. So, use map or use select or, you know, some of the other built-in iterators from the enumerable library. There's a blog post on the thoughtbot blog that I continually link to people. And when I see the pattern of, like, mutating an external variable with each, yeah, I tend to see that as a bit of a code smell. I don't know that I would never do it, but whenever I see that, it's a sign to me to, like, pause and be like, wait a minute, is there a better way to do this? STEPHANIE: Yeah, that's fair. I like the idea that, like, if there's already a method available to you that is more specific to go with that. But I also think that sometimes I'd rather, like, come across that pattern of mutating a variable outside of the iteration over, like, someone trying to do something clever with the reduce. JOËL: Yeah, I guess reduce, especially if it's got, like, a giant block and you've got then, like, things in there that break or call next to skip iterations and things like that, that gets really mind-bending really quickly. I think a case where I might consider using an each over a reduce, and that's maybe generally when I tend to use each, is when I'm doing side effects. If I'm using a reduce, it's because I care about the accumulated value at the end. If I'm using each, it's typically because I am trying to do some amount of side effects. STEPHANIE: Yeah, that's a really good call out. I had that written down in my notes, and I'm glad you brought it up because I've seen them get conflated a little bit, and perhaps maybe that's the source of the pain that I'm talking about. But I really like that heuristic of reduce as, you know, you're caring about the output, as opposed to what's going on inside. Like, you don't want any unexpected behavior. JOËL: And I think that applies to something like map as well. My sort of heuristic is, if I'm doing side effects, I want each. If I want transformed values that are sort of one-to-one in the collection, I want map. If I want a single sort of aggregate value, then I want reduce. STEPHANIE: I think that's the cool thing about mixing paradigms sometimes, where all the strategies you talked about in terms of, you know, using custom, like, objects for your accumulator, or the elements in your collection, like, that's something that we get because, you know, we're using an object-oriented language like Ruby. But then, like, you also are kind of bringing the functional programming lens to, like, when you would use reduce in the first place. And yeah, I am just really excited now [chuckles] to start looking for some places I can use reduce after this conversation and see what comes out of it. JOËL: I think I went on a bit of an interesting journey where, as a newer programmer, reduce was just, like, really intense. And I struggled to understand it. And I was like, ban it from code. I don't want to ever see it. And then, I got into functional programming. I was like, I'm going to do reduce everywhere. And, honestly, it was kind of messy. And then I, like, went really deep on a lot of functional theory, and I think understood some things that then I was able to take back to my code and actually write reduce expressions that are much simpler so that now my heuristic is like, I love reduce; I want to use it, but I want as little as possible in the reduce itself. And because I understand some of these other concepts, I have the ability to know what things can be extracted in a way that will feel very natural, in a way that myself from five years ago would have just been like, oh, I don't know. I've got this, you know, 30-line reduce expression that I know is complicated, but I don't know how to improve. And so, a little bit of the underlying theory, I don't think it's necessary to understand these simplified reduces, but as an author who's writing them, I think it helps me write reduces that are simpler. So, that's been my journey using reduce. STEPHANIE: Yeah. Well, thanks for sharing. And I'm really excited. I hope our listeners have learned some new things about reduce and can look at it from a different light. JOËL: There are so many different perspectives. And I think we keep discovering new mental models as we talk to different people. It's like, oh, this particular perspective. And there's one that we didn't really dig into but that I think makes more sense in a functional world that's around sort of deconstructing a structure and then rebuilding it with different components. The shorthand name of this mental model, which is a fairly common one, is constructor replacement. For anyone who's interested in digging into that, we'll link it in the show notes. I gave a talk at an Elm meetup where I sort of dug into some of that theory, which is really interesting and kind of mind-blowing. Not as relevant, I think, for Rubyists, but if you're in a language that particularly allows you to build custom structures out of recursive types or what are sometimes called algebraic data types, or tagged unions, or discriminated unions, this thing goes by a bajillion names, that is a really interesting other mental model to look at. And, again, I don't think the list that we've covered today is exhaustive. You know, I would love it for any of our listeners; if you have your own mental models for how to think about folding, injecting, reducing, send them in: hosts@bikeshed.fm. We'd love to hear them. STEPHANIE: And on that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at referrals@thoughtbot.com with any questions.
Joël discusses the challenges he encountered while optimizing slow SQL queries in a non-Rails application. Stephanie shares her experience with canary deploys in a Rails upgrade. Together, Stephanie and Joël address a listener's question about replacing the wkhtml2pdf tool, which is no longer maintained. The episode's main topic revolves around the concept of multidimensional numbers and their applications in software development. Joël introduces the idea of treating objects containing multiple numbers as single entities, using the example of 2D points in space to illustrate how custom classes can define mathematical operations like addition and subtraction for complex data types. They explore how this approach can simplify operations on data structures, such as inventories of T-shirt sizes, by treating them as mathematical objects. EXPLAIN ANALYZE visualizer (https://explain.dalibo.com/) Canary in a coal mine (https://en.wikipedia.org/wiki/Sentinel_species#Canaries) Episode 413: Developer Tales of Package Management (https://bikeshed.thoughtbot.com/413) Docs for media-specific CSS (https://developer.mozilla.org/en-US/docs/Web/CSS/@media) Episode 386: Value Objects Revisited: The Tally Edition (https://bikeshed.thoughtbot.com/386) Money gem (https://github.com/RubyMoney/money) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I've recently been trying to do some performance enhancements to some very slow queries. This isn't a Rails app, so we're sort of combining together a bunch of different scopes. And the way they're composing together is turning out to be really slow. And I've reached for a tool that is just really fun. It's a visualizer for SQL query plans. You can put the SQL keywords in front of a query: 'EXPLAIN ANALYZE,' and it will then output a query plan, sort of how it's going to attempt to do the work. And that might be like, oh, we're going to use this index on this table to join on this other thing, and then we're going to...maybe this is a table that we think we're going to do a sequential scan through and, you know, it builds out a whole thing. It's a big block of text, and it's kind of intimidating to look at. So, there are a few websites out there that will do this. You just paste a query plan in, and they will build you a nice, little visualization, almost like a tree of, like, tasks to be done. Oftentimes, they'll also annotate it with metadata that they pulled from the query plan. So, oh, this particular node is the really expensive one because we're doing a sequential scan of this table that has 15 million rows in it. And so, it's really useful to then sort of pinpoint what are the areas that you could optimize. STEPHANIE: Nice. I have known that you could do that EXPLAIN ANALYZE on a SQL query, but I've never had to do it before. Is this your first time, or is it just your first time using the visualizer? JOËL: I've played around with EXPLAIN ANALYZE a little bit before. Pro tip: In Rails, if you've got a scope, you can just chain dot explain on the end, and instead of running the query, it will run the EXPLAIN version of it and return the query plan. So, you don't need to, like, turn into SQL then manually run it in your database system to get the EXPLAIN. You can just tack a dot explain on there to get the query plan. It's still kind of intimidating, especially if you've got a really complex query that's...this thing might be 50 lines long of EXPLAIN with all this indentation and other stuff. So, putting it into a sort of online visualizer was really helpful for the work that I was doing. So, it was my first time using an online visualizer. There are a few out there. I'll link to the one that I used in the show notes. But I would do that again, would recommend. STEPHANIE: Nice. JOËL: So, Stephanie, what's new in your world? STEPHANIE: So, I actually just stepped away from being in the middle of doing a Rails upgrade [chuckles] and releasing it to production just a few minutes before getting on to record with you on this podcast. And the reason I was able to do that, you know, without feeling like I had to just monitor to see how it was going is because I'm on a project where the client is using canary deploys. And I was so pleasantly surprised by how easy it made this experience where we had decided to send the canary release earlier this morning. And the way that they have it set up is that the canary goes to 10% of traffic. 10% of the users were on Rails 7 for their sessions. And we saw a couple of errors in our error monitoring service. And we are like, "Okay, like, let's take a look at this, see what's going on." And it turns out it was not too big of a deal because it had to do with, like, a specific page. And, for the most part, if a user did encounter this error, they probably wouldn't again after refreshing because they had, like, a 90% chance [chuckles] of being directed to the previous version where everything is working. And we were kind of making that trade-off of like, oh, we could hotfix this right now on the canary release. But then, as we were starting to debug a little bit, it was a bit hairier than we expected originally. And so, you know, I said, "I have to hop on to go record The Bike Shed. So, why don't we just take this canary down just for the time being to take that time pressure off? And it's Friday, so we're heading into the weekend. And maybe we can revisit the issue with some fresh eyes." So, I'm feeling really good, actually. And I'm glad that we were able to do something that seems scary, but there were guardrails in place to make it a lot more chill. JOËL: Yay for the ability to roll back. You used the term canary release. That's not one that I'm familiar with. Can you explain what a canary release is? STEPHANIE: Oh yeah. Have you heard of the phrase 'Canary in the coal mine'? JOËL: I have. STEPHANIE: Okay. So, I believe it's the same idea where you are, in this case, releasing a potentially risky change, but you don't want to immediately make it available to, like, all of your users. And so, you send this change to, like, a small reach, I suppose, and give it a little bit of a test and see [chuckles] what comes back. And that can help inform you of any issues or risks that might happen before kind of committing to deploying a potentially risky change with a bigger impact. JOËL: Is this handled with something like a feature flag framework? Or is this, like, at an infrastructure level where you're just like, "Hey, we've got the canary image in, like, one container on one server, and then we'll redirect 10% of traffic to that to be served by that one and the other 90% to be served by the old container or something like that"? STEPHANIE: Yeah, in this case, it was at the infrastructure level. And I have also seen something similar at a feature flag level, too, where you're able to have some more granularity around what percent of users are seeing a feature. But I think with something like a Rails upgrade, it was nice to be able to have that at that infrastructure level. It's not necessarily, like, a particular page or feature to show or not show. JOËL: Yeah, I think you would probably want that at a higher level when you're changing over the entire app. Is this something that you had to custom-build yourself or something that just sort of came out of the box with some of the infrastructure tools you're using? STEPHANIE: It came out of the box, actually. I just joined this client project this week and was very delighted to see just some really great deployment infrastructure and getting to meet the DevOps engineers, too, who built it. And they're really proud of it. They kind of walked us through our first release earlier this week. And he was telling me, the DevOps engineer, that this was actually his favorite part of the job, is walking people through their first release and being their buddy while they do it. Because I think he gets to also see users interact with the tool that he built, and he had a lot of pride in that, so it was a very delightful experience. JOËL: That's so wonderful. I've been on so many projects where the sort of infrastructure side of things is not the team's strong point, and releasing can be really scary. And it's great to hear the opposite of that. We recently received a question for Stephanie based on an earlier episode. So, the question asks, "In episode 413, Stephanie discussed a recent issue she encountered with wkhtml2pdf. The episode turned into a deeper discussion about package management, but I don't think it ever cycled back to the conclusion. I'm curious: how did Stephanie solve this dilemma? We're facing the same issue on a project that my team maintains. It's an old codebase, and there are bits of old code that use wkhtml2pdf to generate print views of our data in our application. The situation is fairly dire. wkhtml2pdf is no longer maintained. In fact, it won't even be available to install from our operating system's package repositories in June. We're on FreeBSD, but I assume the same will be eventually true for other operating systems. And so, unless you want to maintain some build step to check out and compile the source code for an application that will no longer receive security updates, just living with it isn't really an option. There are three options we're considering. One, eliminate the dependency entirely. Based on user feedback, it sounds like our old developers were using this library to generate PDFs when what users really wanted was an easy way to print. So, instead of downloading a PDF, just ensure the screen has a good print style sheet and register an onload handler to call window dot print. We're thinking we could implement this as an A/B test to the feature to test this theory. Or two, replace wkhtml2pdf with a call to Headless Chrome and use that to generate the PDF. Or, three, replace wkhtml2pdf with a language-level package. For us, that might be the dompdf library available via Composer because we're a PHP shop." Yeah, a lot to unpack here. Any high-level thoughts, Stephanie? STEPHANIE: My first thought while I was listening to you read that question is that wkhtml2pdf is such a mouthful [laughs]. And I was impressed how you managed to say it at least, like, five times. JOËL: So, I try to say that five times fast. STEPHANIE: And then, my second high-level thought was, I'm so sorry to Brian, our listener who wrote in, because I did not really solve this dilemma [chuckles] for my project and team. I kind of kicked the can down the road, and that's because this was during a support and maintenance rotation that I've talked a little bit about before on the show. I was only working on this project for about a week. And what we thought was a small bug to figure out why PDFs were a little bit broken turned out, as you mentioned, to be this kind of big, dire dilemma where I did not feel like I had enough information to make a good call about what to do. So, I kind of just shared my findings that, like, hey, there is kind of a risk and hoping that someone else [laughs] would be able to make a better determination. But I really was struck by the options that you were considering because it was actually a bit of a similar situation to the bug I was sharing where the PDF that was being generated that was slightly broken. I don't think it was, like, super valuable to our users that it be in the form of a PDF. It really was just a way for them to print something to have on handy as a reference from, you know, some data that was generated from the app. So, yeah, based on what you're sharing, I feel really excited about the first one. Joël, I'm sure you have some opinions about this as well. JOËL: I love sort of the bigger picture thinking that Brian is doing here, sort of stepping back and being like, wait, why do we even need PDF here, and how are our customers using it? I think those are the really good questions to ask before sinking a ton of time into coming up with something that might be, like, a bit of a technical wonder. Like, hey, we managed to, like, do this PDF generation thing that we had to, like, cobble together so many other things. And it's so cool technically, but does it actually solve the underlying problem? So, shout out to Brian for thinking about it in those terms. I love that. Second cool thing that I wanted to shout out, because I think this is a feature of browsers that not many people are aware of; you can have multiple style sheets for your page, and you can tag them to be for different media. So, you can have a style sheet that only gets applied when you print versus when you display on screen. And there are a couple of others. I don't remember exactly what they are. I'll link to the docs in the show notes. But taking advantage of this, like, this is old technology but making that available and saying, "Yeah, we'll make it so that it's nice when you print, and we'll maybe even, you know, a link or a button with JavaScript so that you could just Command-P or Control-P to print. But we'll have a button in there as well that will allow you to print to PDF," and that solves your problem right there. STEPHANIE: Yeah, that's really cool. I didn't know that about being able to tag style sheets for different media types. That's really fascinating. And I like that, yeah, we're just eliminating this dependency on something, like, potentially really complex with a, hopefully, kind of elegant and modern solution, maybe. JOËL: And your browser is already able to do so many of these things. Why do we sort of try to recreate it? Printing is a thing browsers have been able to do for a long time. Printing to PDF is a thing that you can do for a long time. I will sometimes use that on sites where I need to, let's say I'm purchasing something, and I need some sort of receipt to expense, but they won't give me a download, a PDF download that I can send to the accounting team, so I will print to PDF the, like, HTML view. And that works just fine. It's kind of a workaround hack. Sometimes, it doesn't work well because the HTML page is just not well set up to, like, show up on a PDF page. You get some, like, weird, like, pagination issues or things like that. But, you know, just a little bit of thought for a print style sheet, especially for something you know that people are likely going to want to print or to save to PDF, that's a nice touch. STEPHANIE: Yeah. So, good luck, Brian, and let us know how this goes and any outcomes you find successful. So, for today's longer topic, I was excited because I saw, Joël, you dropped something in our topic backlog: Multidimensional Numbers. I'm curious what prompted this idea and what you wanted to say about it. JOËL: We did an episode a while back where we talked about value objects, wrapping numbers, wrapping collections. This is Episode 386, and we were talking about tallying, specifically working with collections of T-shirt sizes and doing math on these sort of objects that might contain multiple numbers. And a sort of sidebar from that that we didn't really get into is the idea that objects that contain sort of multiple numbers can be treated as a number themselves. And I think a great example of this is something like a point in two-dimensional space. It's got an x coordinate, a y coordinate. It's two numbers, but you can treat sort of the combination of the two of them together as a single number. There's a whole set of coordinate math that you can do to do things like add coordinates together, subtract them, find the distance between them. There's a whole field of vector math that we can do on those. And I think learning to recognize that numbers are not just instances of the integer or the float class but that there could be these more complex things that are also numbers is maybe an important realization and something that, as developers, if we think of these sort of more complex values as numbers, or at least mathematical objects, then that will help us write better code. STEPHANIE: Cool. Yeah. When you were first talking about 2D points, I was thinking about if I have experience working with that before or, like, having to build something really heavily based off of, like, a canvas or, you know, a coordinate system. And I couldn't think of any really good examples until I thought about, like, geographic locations. JOËL: Oh yeah, like a latitude, longitude. STEPHANIE: Yeah, exactly. Like, that is a lot more common, I think, for various types of just, like, production applications than 2D points if you're not working on, like, a video game or something like that, I think. JOËL: Right, right. I think you're much more likely to be working with 2D points on some more sort of front-end-heavy application. I was talking with someone this week about managing a seat map for concerts and events like that and sort of creating a seat map and have it be really interactive, and you can, like, click on seats and things like that. And depending on the level of libraries you're using to build that, you may have to do a lot of 2D math to make it all come together. STEPHANIE: Yeah. So, I would love to get into, you know, maybe we've realized, okay, we have some kind of compound number. What are some good reasons for using them differently than you would a primitive? JOËL: So, you mentioned primitives, and I think this is where maybe I'm developing a reputation about, like, always wanting value objects for everything. But it would be really easy, let's say, for an xy point to be just an array of two numbers or maybe even a hash with an x key and a y key. What's tricky about that is that then you don't have the ability to do math on them. Arrays do define the plus operator, but they don't do what you want them to do with points. It's the set union. So, adding two points would not at all do what you want, or subtracting two points. So, instead, if you have a custom 2D point class and you can define plus and minus on there to do the right thing, now they're not pairs of numbers, two values; they're a single value, and you can treat them as if they are just a single number. STEPHANIE: You mentioned that arrays don't do the right thing when you try to add them up. What is the right thing that you're thinking of then? JOËL: It probably depends a little bit on the type of object you're working with. So, with 2D points, you're probably trying to do vector addition where you're effectively saying almost, like, "Shift this point in 2D space by the amount of this other point." Or if you're doing a subtraction, you might even be asking, like, "What is the distance between these two points?" Euclidean distance, I think, is the technical term for this. There's also a couple of different ways you can multiply values. You can multiply a 2D point by just a sort of, not by another point, but by just an integer. That's called scaling. So, you're just like, oh, take this point in 2D space, but make it bigger, make it five times bigger or five times further from the origin. Or you can do some stuff with other points. But what you don't want to do is turn this into, if you're starting with arrays, you don't want to turn this into an array of four points. When you add two points in 2D space, you're not trying to create a point in 4D space. STEPHANIE: Whoa, I mean [laughs], maybe you're not. JOËL: You could but -- [laughter] STEPHANIE: Yeah. While you were saying that, I guess that is what is really cool about wrapping, encapsulating them in objects is that you get to decide what that means for you and your application, and -- JOËL: Yeah. Well, plus can mean different things, right? STEPHANIE: Yeah. JOËL: On arrays, plus means combining two arrays together. On integers, it means you do integer math. And on points, it might be vector addition. STEPHANIE: Are there any other arithmetic operators you can think of that would be useful to implement if you were trying to create some functionality on a point? JOËL: That's a good question because I think realizing the inverse of that is also a really powerful thing. Just because you create a sort of new mathematical object, a point in 2D space, doesn't mean that necessarily every arithmetic operator makes sense on it. Does it make sense to divide a point by another point? Maybe not. And so, instead of going with the mindset of, oh, a point is a mathematical object, I now need to implement all of arithmetic on this, instead, think in terms of your domain. What are the operations that make sense? What are the operations you need for this point? And, you know, maybe the answer is look up what are the common sort of vector math operations and implement those on your 2D point. Some of them will map to arithmetic operators like plus and minus, and then some of them might just be some sort of custom method where maybe you say, "Oh, I want the Euclidean distance between these two points." That's just a thing. Maybe it's just a named instance method on there. But yeah, don't feel like you need to implement all of the math operators because that's a mistake that I have made and then have ended up, like, implementing nonsensical things. STEPHANIE: [laughs] Creating your own math. JOËL: Yes, creating my own math. I've done this even on where I've done value objects to wrap single values. I was doing a class to represent currency, and I was like, well, clearly, you need, like, methods to, like, add or subtract your currency, and that's another thing. If you have, let's say, a plus method, now you can plug it into, let's say, reduce plus. And you can just sum a list of these currency objects and get back a new currency. It's not even going to give you back an integer. You just get a sort of new currency object that is the sum of all the other ones, and that's really nice. STEPHANIE: Yeah, that's really cool. It reminds me of all the magic of enumerable that you had talked about in a previous conference talk, where, you know, you just get so much out of implementing those basic operators that, like, kind of scales in handiness. JOËL: Yes. Turns out Ruby is actually a pretty nice system. If you have objects that respond to some common methods and you plug them into enumerable, and it just all kind of works. STEPHANIE: So, one thing you had said earlier that I've felt kind of excited about and wanted to highlight was you mentioned all the different ways that you could represent a 2D point with more primitive data stores, so, you know, an array of two integers, a hash with xy keys. It got me thinking about how, yeah, like, maybe if your system has to talk to another system and you're importing data or exporting data, it might eventually need to take those forms. But what is cool about having an encapsulated object in your application is you can kind of control those boundaries a little bit and have more confidence in terms of the data types that you're using within your system by having various ways to construct that, like, domain object, even if the data coming in is in a different shape. JOËL: And I think that you're hitting on one of the real beauties of object-oriented programming, where the sort of users of your object don't need to know about the internal representation. Maybe you store an array internally. Maybe it's two separate instance variables. Maybe it's something else entirely. But all that the users of your, let's say, 2D point object really need to care about is, hey, the constructor wants values in this shape, and then I can call these domain methods on it, and then the rest just sort of happens. It's an implementation detail. It doesn't matter. And you alluded, I think, to the idea that you can sort of create multiple constructors. You called them constructors. I tend to call them that as well. But they're really just class methods that will kind of, like, add some sugar on top of the constructor. So, you might have, like, a from array pair or from hash or something like that that allows you to maybe do a little bit of massaging of the data before you pass it into your constructor that might want some underlying form. And I think that's a pattern that's really nice. STEPHANIE: Yeah, I agree. JOËL: Something that can be interesting there, too, is that mathematically, there are multiple ways you can think of a 2D point. An xy coordinate pair is a common one, but another sort of system for representing a point in 2D space is called the polar coordinate system. So, you have some sort of, like, origin point. You're 0,0. And then, instead of saying so many to the left and so many up from that origin point, you give an angle and a distance, and that's where your point is. So, an angle and distance point, I think, you know, theta and magnitude are the fancy terms for this. You could, instead of creating a separate, like, oh, I have a polar coordinate point and a Cartesian coordinate point, and those are separate things, you can say, no, I just have a point in 2D space. They can be constructed from either an xy coordinate pair or a magnitude angle pair. Internally, maybe you convert one to the other for internal representation because it makes the math easier or whatever. Your users never need to know that. They just pass in the values that they want, use the constructor that is most convenient for them, and it might be both. Maybe some parts of the app require polar coordinates; some require Cartesian coordinates. You could even construct one of each, and now you can do math with each other because they're just instances of the same class. STEPHANIE: Whoa. Yeah, I was trying to think about transforming between the two types as well. It's all possible [laughs]. JOËL: Yes. Because you could have reader-type methods on your object that say, oh, for this point, give me its x coordinate; give me its y coordinate. Give me its distance from the origin. Give me its angle from the origin. And those are all questions you can ask that object, and it can calculate them. And you don't need to care what its internal representation is to be able to get all four of those. So, we've been talking about a lot of these sort of composite numbers, not composite numbers, that's a separate mathematical thing, but numbers that are composed of sort of multiple sub-numbers. And what about situations where you have two things, and one of them is not a number? I'm thinking of all sorts of units of measure. So, I don't just have three. I have three, maybe...and we were talking about currency earlier, so maybe three U.S. dollars. Or I don't just have five; I have five, you know, let's say, meters of distance. Would you consider something like that to be one of these compound number things? STEPHANIE: Right. I think I was–when we were originally talking about this, conflating the two. But I realized that, you know, just because we're adding context to a number and potentially packaging it as a value object, it's still different from what we're talking about today where, you know, there's multiple components to the number that are integral or required for it to mean what we intended to mean, if that makes sense. JOËL: Yeah. STEPHANIE: So yeah, I guess we did want to kind of make a distinction between value objects that while the additional context is important and you can implement a lot of different functionality based on what it represents, at the end of the day, it only kind of has one magnitude or, like, one integer to kind of encapsulate it represented as a number. Does that sound right? JOËL: Yeah. You did throw out the words encapsulation and value object. So, in a situation maybe where I have three US dollars, would you create some kind of custom object to wrap that? Or is that a situation where you'd be more comfortable using some kind of primitive? Like, I don't know, maybe an array pair of three and the symbol USD or something like that. STEPHANIE: Oh, I would definitely not do that [laughter]. Yeah. Like I, you know, for the most part, I think I've seen that as a currency object, and that expands the world of what we can do with it, converting into a lot of different other currencies. And yeah, just making sure those things don't get divorced from each other because that context is what gives it meaning. But when it comes to our compound numbers, it's like, without all of the components, it doesn't make sense, or it doesn't even represent the same, like, numerical value that we were trying to convey. JOËL: Right. You need both, or, you know, it could be more than two. It could be three, four, or five numbers together to mean something. You mentioned conversions, which I think is something that's also interesting because a lot of units of measure have sort of multiple ways of measuring, and you often want to convert between them. And maybe that's another case where encapsulation is really nice where, you know, maybe you have a distance object. And you have five meters, and you put that into your distance object, but then somebody wants it in feet somewhere else or in centimeters, or something like that. And it can just do all the conversion math safely inside that object, and the user doesn't have to worry about it. STEPHANIE: Right. This is maybe a bit of a tangent, but as a Canadian living in the U.S., I don't know [laughs] if you have any opinions about converting meters and feet. JOËL: The one I actually do the most often is converting Celsius to Fahrenheit and vice versa. You know, I've been here, what, 11 years now? I don't have a great intuition for Fahrenheit temperatures. So, I'm converting in my head just [laughs] on a daily basis. STEPHANIE: Yeah, that makes sense. Conversions: they're important. They help out our friends who [laughs] are on different systems of measurement. JOËL: There's a classic story that I love about unit conversions. I think it's one of the NASA Mars missions. STEPHANIE: Oh yeah. JOËL: You've heard of this one. It was trying to land on Mars, and it burned up in the atmosphere because two different teams had been building different components and used different unit systems, both according to spec for their own module. But then, when the modules try to talk to each other, they're sending over numbers in meters instead of feet or something like that. And it just caused [laughs] this, like, multi-year, multi-billion dollar project to just burn up. STEPHANIE: That's right. So, lesson of the day is don't do that. I can think of another example where there might be a little bit of misconceptions in terms of how to represent it. And I'm thinking about time and when that has been represented in multiple parts, such as in hours and, minutes and seconds. Do you have any initial impressions about a piece of data like that? JOËL: So, that's really interesting, right? Because, at first glance, it looks like, oh, it's, like, a triplet of hour, minute, seconds. It's sort of another one of these sort of compound numbers, and I guess you could implement it that way. But in reality, you're tracking a single quantity, the amount of time elapsed, and that can be represented with a single number. So, if you're representing, let's say, time of day, what would show up on your clock? That could be, depending on the resolution, number of, let's say, seconds since midnight, and that's a single counter. And then, you can do some math on it to get hours, minutes, seconds for a particular moment. But really, it's a single quantity, and we can do that with time. We can't do that with a 2D point. Like, it has to have two components. STEPHANIE: So, do you have a recommendation for what unit of time time would best be stored? I'm just thinking of all the times that I've had to do that millisecond, you know, that conversion of, you know, however many thousands of milliseconds in my head into something that actually means [laughs] something to me as a human being who measures time in hours and minutes. JOËL: My recommendation is absolutely go for a single number that you store in your, let's say, time of day object. It makes the math so much easier. You don't have to worry about, like, overflowing from one number into another when you're doing math or anything like that. And then the number that you count should be at the whatever the smallest resolution you care at. So, is there ever any time where you want to distinguish between two different milliseconds in time? Or maybe you're like, you know what? These are, like, we're tracking time of day for appointments. We don't care about the difference between two milliseconds. We don't need to track them independently. We don't even care about seconds. The most granular we ever care about things is by the minute. And so, maybe then your internal number that you track is a counter of minutes since midnight. But if you need more precision, you can go down to seconds or milliseconds or nanoseconds. But yeah, find what is the sort of the least resolution you want to get away with and then make that the unit of measure for a single counter in your object. And then encapsulate that so that nobody else needs to care that, internally, your time of day object is doing milliseconds because nobody wants to do that math. Just give me a nice, like, hours and minutes method on your object, and I will use that. I don't need to know internally what it's using. Please don't just pass around integers; wrap it in an object, especially because integers, there's enough times where you're doing seconds versus milliseconds. And when I just have an integer, I never know if the person storing this integer means seconds or milliseconds. So, I'm just like, oh, I'm going to pass to this, like, user object, a, like, time integer. And unless there's a comment or a constant, you know, that's named something duration in milliseconds or something like that, you know, or sometimes even, like, one year in milliseconds, or there's no way of knowing. STEPHANIE: Yeah. That makes a lot of sense. When you kind of choose a standard of a standard unit, it's, like, possible to make it easier [laughs]. JOËL: So, circling back to sort of the initial thing that sparked this conversation, the previous episode about T-shirt inventories, there we were dealing with what started off as, like, a hash of different T-shirt sizes and quantities of T-shirts that we had in that size, so small (five), medium (three), large (four). And then, we eventually turned that into a value object that represented...I think we called it a tally, but maybe we called it inventory. And this may be wrong, so tell me if I'm wrong here, I think we can kind of treat that as a number, as, like, one of these compound numbers. It's a sort of multidimensional number where you say, well, we have sort of three dimensions where we can have numbers that sort of increase and decrease independently. We can do math on these because we can take inventories or tallies and add and subtract them. And that's what we ended up having to do. We created a value object. We implemented plus and minus on it. There are rules for how the math works. I think this is a multidimensional number with the definition we're working on this show. Am I wrong here? STEPHANIE: I wouldn't say that you're wrong. I think I would have to think a little [laughs] more to say definitively that you're right. But I know that this example came from, you know, an application I was actually working on. And one of the main things that we had to do with these representations [laughs], I'm hesitant to call them a number, especially, but we had to compare these representations frequently because an inventory, for example, in a warehouse, wanting to make sure that it is equal to or there's enough of the inventory if someone was placing an order, which would also contain, like, a representation of T-shirt size inventory. And that was kind of where some of that math happened because, you know, maybe we don't want to let someone place an order if the inventory at the warehouse is smaller than their order, right? So, there is something really compelling about the comparison operations that we were doing that kind of is leaning me in the direction of, like, yeah, like, it makes sense to me to use this in a way that I would compare, like, quantities or numbers of something. JOËL: I think one thing that was really compelling to me, and that kind of blew my mind, was that we were trying to, like, figure out some things like, oh, we've got so many people with these size preferences, and we've got so many T-shirts across different warehouses. And we're summing them up and we're trying to say like, "How many do we need to purchase if there is a deficit?" And we can come up with effectively a formula for this. We're like, sum these numbers, when we're talking about just before we introduce sizes when it's just like, oh, people have T-shirts. They all get the count of people and a count of T-shirts in our warehouse, and we find, you know, the difference between that. And there's a few extra math operations we do. Then you introduce size, and you break it down by, oh, we've got so many of each. And now the whole thing gets really kind of messy and complicated. And you're doing these reduces and everything. When we start treating the tally of T-shirts as an object, and now it's a number that responds to plus and minus, all of a sudden, you can just plug those back into the original formula, and it all just works. The original formula doesn't care whether the numbers you're doing this formula on are simple integers or these sort of multidimensional numbers. And that blew my mind, and it was so cool. STEPHANIE: Yeah, that is really neat. And you get a lot of added benefits, too. I think the other important piece in the T-shirt size example was kind of tracking the state change, and that's so much easier when you have an object. There's just a lot more you can do with it. And even if, you know, you're not persisting every single version of the representation, you know, because sometimes you don't want to, sometimes you're really just kind of only holding it in memory to figure out if you need to, you know, do something else. But other times, you do want to persist it. And it just plugs in really well with, like, the rest of object-oriented programming [laughs] in terms of interacting with the rest of your business needs, I think, in your app. JOËL: Yeah, turns out objects, they're kind of nice. And you can do math with them. Who knew? Math is not just about integers. STEPHANIE: And on that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at referrals@thoughtbot.com with any questions.
Stephanie has a delightful and cute Ruby thing to share: Honeybadger, the error monitoring service, has created exceptionalcreatures.com, where they've illustrated and characterized various common Ruby errors into little monsters, and they're adorable. Meanwhile, Joël encourages folks to submit proposals for RailsConf. Together, Stephanie and Joël delve into the nuances of adapting to and working within new codebases, akin to aligning with a shared mental model or vision. They ponder several vital questions that every developer faces when encountering a new project: the balance between exploring a codebase to understand its structure and diving straight into tasks, the decision-making process behind adopting new patterns versus adhering to established ones, and the strategies teams can employ to assist developers who are familiarizing themselves with a new environment. Honeybadger's Exceptional Creatures (https://www.exceptionalcreatures.com/) RailsConf CFP coaching sessions (https://docs.google.com/forms/d/e/1FAIpQLScZxDFaHZg8ncQaOiq5tjX0IXvYmQrTfjzpKaM_Bnj5HHaNdw/viewform) HTTP Cats (https://http.cat/) Support and Maintenance Episode (https://bikeshed.thoughtbot.com/409) Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: I have a delightful and cute Ruby thing to share I'd seen just in our internal company Slack. Honeybadger, the error monitoring service, has created a cute little webpage called exceptionalcreatures.com, where they've basically illustrated and characterized various common Ruby errors into little monsters [laughs], and I find them adorable. I think their goal is also to make it a really helpful resource for people encountering these kinds of errors, learning about them for the first time, and figuring how to triage or debug them. And I just think it's a really cool way of, like, making it super approachable, debugging and, you know, when you first encounter a scary error message, can be really overwhelming, and then Googling about it can also be equally [chuckles] overwhelming. So, I just really liked the whimsy that they kind of injected into something that could be really hard to learn about. Like, there are so many different error messages in Ruby and in Rails and whatever other libraries you're using. And so, that's kind of a...I think they've created a one-stop shop for, you know, figuring out how to move forward with common errors. And I also like that it's a bit of a collective effort. They're calling it, like, a bestiary for all the little creatures [laughs] that they've discovered. And I think you can, like, submit your own favorite Ruby error and any guidance you might have for someone trying to debug it. JOËL: That's adorable. It reminds me a little bit of HTTP status codes as cat memes site. It has that same energy. One thing that I think is really interesting is that because it's Honeybadger, they have stats on, like, frequency of these errors, and a lot of these ones are tied to...I think they're picking some of the most commonly surfaced errors. STEPHANIE: Yeah, there's little, like, ratings, too, for how frequently they occur, kind of just like, I don't know, Pokémon [laughs] [inaudible 02:31]. I think it's really neat that they're using something like a learning from their business or maybe even some, like, proprietary information and sharing it with the world so that we can learn from it. JOËL: I think one thing that's worth specifying as well is that these are specific exception classes that get raised. So, they're not just, like, random error strings that you see in the wild. They don't often have a whole lot of documentation around them, so it's nice to see a dedicated page for each and a little bit of maybe how this is used in the real world versus maybe how they were designed to be used. Maybe there's a line or two in the docs about, you know, core Ruby when a NoMethodError should be raised. How does NoMethodError actually get used, you know, in real life, and the exceptions that Honeybadger is capturing. That's really interesting to see. STEPHANIE: Yeah, I like how each page for the exception class, and I'm glad you made that distinction, is kind of, like, crowdsourced guidance and information from the community, so I think you could even, you know, contribute to it if you wanted. But yeah, just a fun, little website to bring you some delight when you're on your next head-smacking, debugging adventure [laughs]. JOËL: And I love that it brings some joy to the topic, but, honestly, I think it's a pretty good reference. I could see myself linking to this anytime I want to have a deeper discussion on exceptions. So, maybe there's a code review, and maybe I want to suggest that we raise a different error than the one that we're doing. I could see myself in that GitHub comment being like, "Oh, instead of, you know, raising an exception here, why don't we instead raise a NoMethodError or something like that?" And then link to the bestiary page. STEPHANIE: So, Joël, what's new in your world? JOËL: So, just recently, RailsConf announced their call for proposals. It's a fairly short period this year, only about three-ish weeks long. So, I've been really encouraging colleagues to submit and trying to be a resource for people who are interested in speaking at conferences. We did a Q&A session with a fellow thoughtboter, Aji Slater, who's also a former RailsConf speaker, about what makes for a good talk, what is it like to submit to a call for proposals, you know, kind of everything from the process from having an idea all the way to stage presence and delivering. And there's a lot of great questions that got asked and some good discussion that happened there. STEPHANIE: Nice. Yeah, I think I have noticed that you are doing a lot more to help, especially first-time speakers give their first conference talk this year. And I'm wondering if there's anything you've learned or any hopes and dreams you have for kind of the amount of time you're investing into supporting others. JOËL: What I'd like to see is a lot of people submitting proposals; that's always a great thing. And, a proposal, even if it doesn't get accepted, is a thing that you can resubmit. And so, having gone through the effort of building a proposal and especially getting it maybe peer-reviewed by some colleagues to polish your idea, I think is already just a really great exercise, and it's one that you can shop around. It's one that you can maybe convert into a blog post if you need to. You can convert that into some kind of podcast appearance. So, I think it's a great way to take an idea you're excited about and focus it, even if you can't get into RailsConf. STEPHANIE: I really like that metric for success. It reminds me of a writer friend I have who actually was a guest on the show, Nicole Zhu. She submits a lot of short stories to magazines and applications to writing fellowships, and she celebrates every rejection. I think at the end of the year, she, like, celebrates herself for having received, you know, like, 15 rejections or something that year because that meant that she just went for it and, you know, did the hard part of doing the work, putting yourself out there. And that is just as important, you know, if not more than whatever achievement or goal or the idea of having something accepted. JOËL: Yeah, I have to admit; rejection hurts. It's not a fun thing to go through. But I think even if you sort of make it to that final stage of having written a proposal and it gets rejected, you get a lot of value out of that journey sort of regardless of whether you get accepted or not. So, I encourage more people to do that. To any of our listeners who are interested, the RailsConf call for proposals goes through February 13th, 2024. So, if you are listening before then and are inspired, I recommend submitting. If you're unsure of what makes for a good CFP, RailsConf is currently offering coaching sessions to help craft better proposals. They have one on February 5th, one on February 6th, and one on February 7th, so those are also options to look into if this is maybe your first time and you're not sure. There's a signup form. We'll link to it in the show notes. STEPHANIE: So, another update I have that I'm excited to get into for the rest of the episode is my recent work on our support and maintenance team, which I've talked about on the show before. But for any listeners who don't know, it's a kind of sub-team at thoughtbot that is focused on helping maintain multiple client projects at a time. But, at this point, you know, there's not as much active feature development, but the work is focused on keeping the codebase up to date, making any dependency upgrades, fixing any bugs that come up, and general support. So, clients have a team to kind of address those things as they come up. And when I had last talked about it on the podcast, I was really excited because it was a bit of a different way of working. I felt like it was very novel to be, you know, have a lot of different projects and domains to be getting into. And knowing that I was working on this team, like, short-term and, you know, it may not be me in the future continuing what I might have started during my rotation, I thought it was really interesting to be optimizing towards, like, completion of a task. And that had kind of changed my workflow a bit and my process. JOËL: So, now that you've been doing work on the support and maintenance team for a while and you've kind of maybe gotten more comfortable with it, how are you generally feeling about this idea of sort of jumping into new codebases all the time? STEPHANIE: It is both fun and more challenging than I thought it would be. I tend to actually really enjoy that period of joining a new team or a project and exploring, you know, a codebase and getting up to speed, and that's something that we do a lot as consultants. But I think I started to realize that it's a bit of a tricky balance to figure out how much time should I be spending understanding what this codebase is doing? Like, how much of the application do I need to be understanding, and how much poking around should I be doing before just trying to get started on my first task, the first starter ticket that I'm given? There's a bit of a balance there because, on one hand, you could just immediately start on the task and kind of just, you know, have your blinders [chuckles] on and not really care too much about what the rest of the code is doing outside of the change that you're trying to make. But that also means that you don't have that context of why certain things are the way they are. Maybe, like, the way that you want to be building something actually won't work because of some unexpected complexity with the app. So, I think there, you know, needs to be time spent digging around a little bit, but then you could also be digging around for a long time [chuckles] before you feel like, okay, I finally have enough understanding of this new codebase to, like, build a feature exactly how a seasoned developer on the team might. JOËL: I imagine that probably varies a little bit based on the task that you're doing. So, something like, oh, we want to upgrade this codebase to Ruby 3.3, probably requires you to have a very different understanding of the codebase than there's a bug where submitting a comment double posts it, and you have to dig into that. Both of those require you to understand the application on very different levels and kind of understand different mental models of what the app is doing. STEPHANIE: Yeah, absolutely. That's a really good point that it can depend on what you are first asked to work on. And, in fact, I actually think that is a good guidepost for where you should be looking because you could develop a mental model that is just completely unrelated [chuckles] to what you're asked to do. And so, I suppose that is, you know, usually a good place to start, at least is like, okay, I have this first task, and there's some understanding and acceptance that, like, the more you work on this codebase, the more you'll explore and discover other parts of it, and that can be on a need to know kind of basis. JOËL: So, I'm thinking that if you are doing something like a Ruby upgrade or even a Rails upgrade, a lot of what you care about the app is going to be on a more mechanical level. So, you want to know what gems you're using. You want to know what different patterns are being used, maybe how callbacks are happening, any particular features that are version-specific that are being used, things like that. Whereas if you're, you know, say, fixing a bug, you might care a lot more about some of the product-level concerns. What are we actually trying to do here? What is the expected user experience? How does this deviate from that? What were the underlying mental models of the developers? So, there's almost, like, two lenses you can look at the code. Now, I almost want to make this a two-dimensional thing, where you can look at it either from, like, a very kind of mechanical lens or a product lens in one axis. And then, on the other axis, you could look at it from a very high-level 10,000-foot view and maybe zoom in a little bit where you need, versus a very localized view; here's where the bug is happening on this page, and then sort of zoom out as necessary. And I could see different sorts of tasks falling in different quadrants there of, do I need a more mechanical view? Do I need a more product-focused view? And do I need to be looking locally versus globally? STEPHANIE: Wow. I can't believe you just created a Cartesian graph [laughs] for this problem on the fly. But I love it because I do think that actually lines up with different strategies I've taken before. It's like, how much do you even look at the code before deciding that you can't really get a good picture of it, of what the product is, without just poking around from the app itself? I actually think that I tend to start from the code. Like, maybe I'll see a screenshot that someone has shared of the app, you know, like a bug or something that they want me to fix, and then looking for that text in the code first, and then trying to kind of follow that path, whereas it's also, you know, perfectly viable to try to see the app being used in production, or staging, or something first to get a better understanding of some of the business problems it's trying to solve. JOËL: When you jump into a new codebase, do you sort of consciously take the time to plan your approach or sort of think about, like, how much knowledge of this new codebase do I need before I can, like, actually look at the problem at hand? STEPHANIE: Ooh, that's kind of a hard question to answer because I think my experience has told me enough times that it's never what I think it's going to [laughs] be, not never, but it frequently surprises me. It has surprised me enough times that it's kind of hard to know off the bat because it's not...as much as we work in frameworks that have opinions and conventions, a lot of the work that happens is understanding how this particular codebase and team does things and then having to maybe shift or adjust from there. So, I think I don't do a lot of planning. I don't really have an idea about how much time it'll take me because I can't really know until I dive in a little bit. So, that is usually my first instinct, even if someone is wanting to, like, talk to me about an approach or be, like, "Hey, like, how long do you think this might take based on your experience as a consultant?" This is my first task. Oftentimes, I really can't say until I've had a little bit of downtime to, in some ways, like, acquire the knowledge [chuckles] to figure that out or answer that question. JOËL: How much knowledge do you like to get upfront about an app before you dive into actually doing the task at hand? Are there any things, like, when you get access to a new codebase, that you'll always want to look at to get a sense of the project before you look at any tickets? STEPHANIE: I actually start at the model level. Usually, I am curious about what kinds of objects we're working with. In fact, I think that is really helpful for me. They're like building blocks, in order for me to, like, conceptually understand this world that's being represented by a codebase. And I kind of either go outwards or inwards from there. Usually, if there's a model that is, like, calling to me as like, oh, I'll probably need to interact with, then I'll go and seek out, like, where that model is created, maybe through controllers, maybe through background jobs, or something like that, and start to piece together entry points into the application. I find that helpful because a lot of the times, it can be hard to know whether certain pages or routes are even used at all anymore. They could just be dead code and could be a bit misleading. I've certainly been misled [chuckles] more than once. And so, I think if I'm able to pull out the main domain objects that I notice in a ticket or just hear people talk about on the team, that's usually where I gravitate towards first. What about you? Do you have a place you like to start when it comes to exploring a new codebase like that? JOËL: The routes file is always a good sort of overview of, like, what is going on in the app. Scanning the models directory is also a great start in a Rails app to get a sense of what is this app about? What are the core nouns in our vocabulary? Another thing that's good to look for in a codebase is what are the big types of patterns that they tend to use? The Rails ecosystem goes through fads, and, over time, different patterns will be more popular than others. And so, it's often useful to see, oh, is this an app where everything happens in service objects, or is this an app that likes to rely on view components to render their views? Things like that. Once you get a sense of that, you get a little bit of a better sense of how things are architected beyond just the basic MVC. STEPHANIE: I like that you mentioned fads because I think I can definitely tell, you know, how modern an app is or kind of where it might be stuck in time [chuckles] a little bit based on those patterns and libraries that it's heavily utilizing, which I actually find to be an interesting and kind of challenging position to be in because how do you approach making changes to a codebase that is using a lot of patterns or styles from back in the day? Would you continue following those same patterns, or do you feel motivated to introduce something new or kind of what might be trendy now? JOËL: This is the boring answer, but it's almost never worth it to, like, rewrite the codebase just to use a new pattern. Just introducing the new pattern in some of the new things means there are now two patterns. That's also not a great outcome for the team. So, without some other compelling reason, I default to using the established patterns. STEPHANIE: Even if it's something you don't like? JOËL: Yes. I'm not a huge fan of service objects, but I work in plenty of codebases that have them, and so where it makes sense, I will use service objects there. Service objects are not mutually exclusive with other things, and so sometimes it might make sense to say, look, I don't feel like I can justify a service object here. I'll do this logic in a view, or maybe I'll pull this out into some other object that's not a service object and that can live alongside nicely. But I'm not necessarily introducing a new pattern. I'm just deciding that this particular extraction might not necessarily need a service object. STEPHANIE: That's an interesting way to describe it, not as a pattern, but as kind of, like, choosing not to use the existing [chuckles] pattern. But that doesn't mean, like, totally shifting the architecture or even how you're asking other people to understand the codebase. And I think I'm in agreement. I'm actually a bit of a follower, too, [laughs], where I want to, I don't know, just make things match a little bit with what's already been created, follow that style. That becomes pretty important to me when integrating with a team in a codebase. But I actually think that, you know, when you are calibrating to a codebase, you're in a position where you don't have all that baggage and history about how things need to be. And maybe you might be empowered to have a little bit more freedom to question existing patterns or bring some new ideas to the team to, hopefully, like, help the code evolve. I think that's something that I struggle with sometimes is feeling compelled to follow what came before me and also wanting to introduce some new things just to see what the team might think about them. JOËL: A lot of that can vary depending on what is the pattern you want to introduce and sort of what your role is going to be on that team. But that is something that's nice about someone new coming onto a project. They haven't just sort of accepted that things are the way they are, especially for things that the team already doesn't like but doesn't feel like they have the energy to do anything better about it. So, maybe you're in a codebase where there's a ton of Ruby code in your ERB templates, and it's not really a pattern that you're following. It's just a thing that's there. It's been sort of the path of least resistance for a long time, and it's easier to add more lines in there, but nobody likes it. New person joins the team, and their naive exuberance is just like, "We can fix it. We can make it better." And maybe that's, you know, going back and rewriting all of your views. That's probably not the best use of their time. But it could be maybe the first time they have to touch one of these views, cleaning up that one and starting a conversation among the team. "Hey, here are some patterns that we might like to clean up some of these views instead," or "Here are maybe some guidelines for anything new that we write that we want to do to keep our views clean," and sort of start moving the needle in a positive direction. STEPHANIE: I like the idea of moving the needle. Even though I tend to not want to stir the pot with any big changes, one thing that I do find myself doing is in a couple of places in the specs, just trying to refactor a bit away from using lets. There were some kind of forward-thinking decisions made before when RSpec was basically going to deprecate using the describe block without prepending it with their module, so just kind of throwing that in there whenever I would touch a spec and asking other people to do the same. And then, recently, one kind of, like, small syntax thing that I hadn't seen before, and maybe this is just because of the age of the codebases in which I'm working, the argument forwarding syntax in Ruby that has been new, I mean, it's like not totally new anymore [laughs], but throwing that in there a little every now and then to just kind of shift away from this, you know, dated version of the code kind of towards things that other people are seeing and in newer projects. JOËL: I love harnessing that energy of being new on a project and wanting to make things better. How do you avoid just being, you know, that developer, though, that's new, comes in, and just wants to change everything for the sake of change or for your own personal opinions and just kind of moves things around, stirs the pot, but doesn't really contribute anything net positive to the team? Because I've definitely seen that as well, and that's not a good first contribution or, you know, contribution in general as a newer team member. How do we avoid being that person while still capitalizing on that energy of being someone new and wanting to make a positive impact? STEPHANIE: Yeah, that's a great point, and I kind of alluded to this earlier when I asked, like, oh, like, even if you don't like an existing syntax or pattern you'll still follow it? And I think liking something a different way is not a good enough reason [chuckles]. But if you are able to have a good reason, like I mentioned with the RSpec prepending, you know, it didn't need to happen now, but if we would hope to upgrade that gem eventually, then yeah, that was a good reason to make that change as opposed to just purely aesthetic [laughs]. JOËL: That's one where there is pretty much a single right answer to. If you plan to keep staying up to date with versions of RSpec, you will eventually need to do all these code changes because, you know, they're deprecating the old way. Getting ahead of that gradually as we touch spec files, there's kind of no downside to it. STEPHANIE: That's true, though maybe there is a person who exists out there who's like, "I love this old version of RSpec, and I will die on this hill that we have to stay on [laughs] it." But I also think that I have preferences, but I'm not so attached to them. Ideally, you know, what I would love to receive is just, like, curiosity about like, "Oh, like, why did you make this change?" And just kind of share my reasoning. And sometimes in that process, I realize, you know, I don't have a great reason, and I'll just say, "I don't have a great reason. This is just the way I like it. But if it doesn't work for you, like, tell me, and I'll consider changing it back. [chuckles]" JOËL: Maybe that's where there's a lot of benefit is the sort of curiosity on the part of the existing team and sort of openness to both learn about existing practices but also share about different practices from the new teammate. And maybe that's you're coming in, and you have a different style where you like to write tests, maybe without using RSpec's let syntax; the team is using it. Maybe you can have a conversation with the team. It's almost certainly not worth it for you to go and rewrite the entire test suite to not use let and be like, "Hey, first PR. I made your test better." STEPHANIE: Hundreds of files changed, thousands [laughs] of lines of code. I think that's actually a good segue into the question of how can a team support a new hire or a new developer who is still calibrating to a codebase? I think I'm curious about this being different from onboarding because, you know, there are a lot of things that we already kind of expect to give some extra time and leeway for someone who's new coming in. But what might be some ways to support a new developer that are less well known? JOËL: One that I really like is getting them involved as early as possible in code review because then they get to see the patterns that are coming in, and they can be involved in conversations on those. The first PR you're reviewing, and you see a bunch of tests leaning heavily on let, and maybe you ask a question, "Is this a pattern that we're following in this codebase? Did we have a particular motivation for why we chose this?" And, you know, and you don't want to do it in a sort of, like, passive-aggressive way because you're trying to push something else. It has to come from a place of genuine curiosity, but you're allowing the new teammate to both see a lot of the existing patterns kind of in very quick succession because you see a pretty good cross-section of those when you review code. And also, to have conversations about them, to ask anything like, "Oh, that's unusual. I didn't know we were doing that." Or, "Hey, is this a pattern that we're doing kind of just local to this subsystem, or is this something that's happening all the way? Is this a pattern that we're using and liking? Is this a thing that we were doing five years ago that we're phasing out, but there's still a few of them left?" Those are all, I think, great questions to ask when you're getting started. STEPHANIE: That makes a lot of sense. It's different from saying, "This is how we do things here," and expecting them to adapt or, you know, change to fit into that style or culture, and being open to letting it evolve based on the new team, the new people on the team and what they might be bringing to the table. I like to ask the question, "What do you need to know?" Or "What do you need to be successful?" as opposed to telling them what I think they need [laughs]. I think that is something that I actually kind of recently, not regret exactly, but I was kind of helping out some folks who were going to be joining the team and just trying to, like, shove all this information down their throats and be like, "Oh, and watch out for these gotchas. And this app uses a lot of callbacks, and they're really complex." And I think I was maybe coloring their [chuckles] experience a little bit and expecting them to be able to drink from the fire hose, as opposed to trusting that they can see for themselves, you know, like, what is going on, and form opinions about it, and ask questions that will support them in whatever they are looking to do. When we talked earlier about the four different quadrants, like, the kind of information they need to know will differ based off of their task, based off of their experience. So, that's one way that I am thinking about to, like, make space for a new developer to help shape that culture, rather than insisting that things are the way they are. JOËL: It can be a fine balance where you want to be open to change while also you have to remain kind of ruthlessly pragmatic about the fact that change can be expensive. And so, a lot of changes you need to be justified, and you don't want to just be rewriting your patterns for every new employee or, you know, just to follow the latest trends because we've seen a lot of trends come and go in the Rails ecosystem, and getting on all of them is just not worth our time. STEPHANIE: And that's the hard truth of there's always trade-offs [laughs] in software development, isn't that right? JOËL: It sure is. You can't always chase the newest shiny, as fun as that is. STEPHANIE: On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!! AD: Did you know thoughtbot has a referral program? If you introduce us to someone looking for a design or development partner, we will compensate you if they decide to work with us. More info on our website at: tbot.io/referral. Or you can email us at referrals@thoughtbot.com with any questions.
Joël describes an old-school object orientation exercise that involves circling nouns in a business problem description. The purpose is determining which nouns could become entities or objects in a system. Stephanie shares she's working from the Hudson Valley in New York as a trial run for potentially relocating there. She enjoys the rail trails for biking and contrasts it with urban biking in Chicago. The conversation between Joël and Stephanie revolves around mentorship, both one-on-one and within a group setting. They introduce a new initiative at thoughbot where team members pair up with principal developers for weekly sessions, emphasizing sharing perspectives and experiences. Socratic method (https://tilt.colostate.edu/the-socratic-method/) Mentorship in 3 Acts by Adam Cuppy (https://www.youtube.com/watch?v=eDX5WH1uLz8) Exercism mentoring (https://exercism.org/mentoring) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I was recently having a conversation with a colleague about some old-school object orientation exercises that people used to do when trying to do more of the analysis phase of software, ones that I haven't seen come up a lot in the past; you know, 5, 10 years. The particular one that I'm thinking about is an exercise where you write out the sort of business problem, and then you go through and you circle all of the nouns in that paragraph. And then, from there, you have a conversation around which one of these are kind of the same thing and are just synonyms? Which ones might be slight variations on an idea? And which ones should become entities in your system? Because, likely, these things are then going to be objects in the system that you're creating. STEPHANIE: Wow, that sounds really cool. I'm surprised that it's considered old school or, I guess, I haven't heard of it before. So, it's not something in my toolbox these days. But I really like that idea. I guess, you know if you're doing it on pen and paper, it's obviously kind of timeless to me. JOËL: And you could easily do it, you know, in a Google Doc and underline, or highlight, or whatever you want to do. But it's not an exercise that I see people really doing even at the larger scale but even at, the smaller scale, where you have maybe a ticket in your ticketing system, and it has a paragraph there kind of describing what needs to be done. We tend to just kind of jump into, oh, we're going to build a story and do the work and maybe not always think about what are the entities that need to happen out of that. STEPHANIE: I think the other thing that I really like about this idea is the aligning on shared vocabulary. So, if you find yourself using different words for the same idea, is that an opportunity to pick the vocabulary that best represents what this means? Rather than a situation that I often find myself in, where we're all talking about the same things but using different words and sometimes causing a little bit more confusion than I think is necessary. JOËL: Definitely. It can also be a good opportunity to connect with the product or businesspeople around; hey, here are two words that sound like they're probably meaning the same thing. Is there a distinction in your business? And then, you realize, wait a minute, a shopping cart and an order actually do have some slight differences. And now you can go into those. And that probably sparks some really valuable learning about the problem that you're trying to solve that might not come up otherwise, or maybe that only comes up at code review time, or maybe even during the QA phase rather than during the analysis phase. STEPHANIE: Yeah. I think that's really important for us as developers because, as we know, naming is often the hardest part of writing code, right? And, you know, at that point, you are making that decision or that distinction between maybe a couple of different terms that you're using to describe an idea and putting that down then will continue on to be read. And just propagating that down the line of, is this name actually what we mean? Or maybe we are using words that, at this lower level, make more sense, but when interacting or communicating with business stakeholders or product folks, they are using a different term. And I really like the idea of that activity being a cross-functional one where you can kind of agree on how to move forward there. Because lately, I've been finding myself oftentimes using both words where the product folks are describing it this way, and then we've, on the engineering side, have decided that, okay, we're actually going to call our database table this other thing, and now having to type out both [chuckles] meanings each time because I know that my audience is in both camps. JOËL: Yeah. There's, I think, a lot of value in using the business terms where possible. If you don't use them, there has to be a good reason. There's a slight distinction for the technical term. We're using it to say, hey, it's different from the business idea in interesting ways that only matter to the dev team. STEPHANIE: Is there a name for this activity? JOËL: I don't know, just circling nouns or underlining nouns. STEPHANIE: Cool. Maybe we can come up with something. [laughs] Or someone else can tell us if they know what this kind of exercise is called. JOËL: Gotta name the naming activity. So, how about you, Stephanie, what's new in your world? STEPHANIE: So, I have a pretty exciting life development to share. I am currently working from a different location than my home in Chicago. I'm in the Hudson Valley in New York for the next month because my partner and I are considering moving out here. And we are just kind of looking for a different pace of life a little bit. And we are taking this month as a trial run to see if we want to, you know, be out here permanently. And I've been having a great time so far. One thing that I've really enjoyed is all of the rail trails out here. So, a lot of old railroad tracks have been repurposed for outdoor recreation, and they are great for biking, or running, or even just walking. And I've been able to hop on my bike, you know, and bike a few minutes, and then I'm on the trail and just kind of surrounded by trees and forests. And that's been really nice because I missed having access to nature kind of, like, right outside my door. JOËL: So, you used to do quite a bit of urban biking in Chicago. But it sounds like now you're getting a chance to do more kind of nature biking. STEPHANIE: Yeah, it's a big difference for me because urban biking was always pretty rough or a little scary just, you know, having to bike with traffic. And I got a lot better at it. But now I'm, you know, biking completely off the roads. And I don't have to worry too much about cars. And I can, you know, just enjoy the fresh air around me and just be a lot more relaxed, I think, than I was able to when I was commuting in the city. JOËL: So, here's the real question. At this new location that you're staying at, do you have a bike shed? STEPHANIE: Not yet. But we now could have a bike shed because there's a lot more space out here, too. So, I could theoretically have my bike shed in my nice, big yard right next to my garden. And these are all [laughs] the hopes and dreams I have for my future life. JOËL: Before you build the bike shed, you can have six months of discussion about what color you want to paint it. STEPHANIE: Yeah, that's why I have this podcast, actually. [laughter] So, look out for that in what's new in my world is considering paint colors for a theoretical future bike shed in a place where I yet don't live. JOËL: You're going to become an expert in the Pantone color palettes. STEPHANIE: I hope so. That would be a great addition to my title. So, another thing that's new in both of our shared worlds is a new initiative on Boost, the team we're on, that you have been involved in. It's pairing sessions with the principal developer. JOËL: Yes. So myself and, another principal developer at thoughtbot have been doing weekly pairing sessions, where we take Tuesday afternoons and pair with one of the other members of the team on their client project doing whatever. So, it's not, a, like, pull someone in when you need help or anything that's more kind of targeted in that way. It's more of a you sign up for this ahead of time. And you just know that on this week, you get someone to pair with you who can hopefully bring in a different perspective a lot of experience, and pair with you on your particular project. STEPHANIE: Yeah. I'm so excited about this initiative because I've not been staffed on a project with you before or the other principal developer who's involved. And I have really wanted to work with you all and be able to learn from you. And I think this is a really cool way to make that expertise more accessible if you just don't happen to be working on a project together. JOËL: Yeah. One of the challenges I think of the principal role is that we want it to be a role that has a high impact on the team as a whole. But also, we are people who can be staffed on pretty much any client project that gets thrown at us and can easily be staffed on projects that require solo work. Whereas there are some teammates who I think it's the developer position that we guarantee they're never staffed solo. And so, that can often mean that our principals get staffed on to the really technically challenging problems or the solo problems, but then there's maybe not as much room to have interactions with the rest of the team on a day-to-day basis. STEPHANIE: Yeah. I think the key word you said that had me nodding my head was impact. And I'm curious what your hopes are for this effort and what kind of impact you want to be having for our team. JOËL: I think it's impact on a few different levels, definitely some form of knowledge sharing. Myself and the other principal developer have decade plus experience each in the field, have deep knowledge in a lot of different things like test-driven development, object modeling, security, things like that that build on top of kind of more basic developer skills that we all have. And those are all, I think, great ways that we can support our team if there's any interest in those particular skills or if they come up on a particular project. And knowledge sharing works both ways, right? I think anytime you're pairing with someone else, there's an opportunity to learn on both sides. And so, I think a really important thing when you're pairing with someone, even if you're kind of maybe more explicitly the mentor figure, is to kind of keep that open mind and look for not only what can I give, how can I teach, but what can I learn from this other person? STEPHANIE: Yeah, absolutely. I guess I'm wondering...and I know this is a pretty new programming so far, but is there anything you've learned or anything that surprised you that you weren't expecting when you, you know, first conceived of the idea based on how it's been going? JOËL: Something that really surprised me, there's some feedback I got after one of the pairing sessions, where this colleague who we'd paired together...and I felt like I hadn't contributed a ton, like, this colleague just really had it and was just kind of going through and doing things. So, I was kind of, like, leaving that pairing session being like, oh, I don't know if I added a ton of value here. And then, this colleague reached out to me and said, "Oh, you know, I felt, like, this huge boost of confidence because we were pairing together, and you were just kind of nodding along and basically saying yes to all of my choices." And I hadn't really considered that that can be a really valuable aspect of this sort of pairing. Sometimes you know the right thing to do, like, you've got it. But it's really easy to second-guess yourself. And just having someone along to, you know, give you that thumbs of like, yeah, this is the thing to do, can give you that confidence boost and kind of keep you moving in a way that feels really positive. STEPHANIE: Wow. I love that. That's really powerful, and I get that. Because, you know, obviously, it's very valuable to have your colleagues help generate different ideas that you might not have considered. But that validation can be really useful. And, you know, that's just not something you get when with a rubber duck. [laughs] The rubber duck can't respond, and [laughs] nod along. So, I think that's really cool that you were able to provide some of that confidence. And, in fact, I think that is contributing to their growth, right? In terms of helping identify, you know, those aspects that they're already really strong at, as well as developing that relationship so they know you're available to them next time if they do need someone to either do that invalidating or validating of an idea. JOËL: Yeah, there's a lot of power, I think, in kind of calling out people's strength and providing validation in a way that can really help someone get to the next level in their career. And it feels like such a simple thing. But yeah, sometimes you can have the biggest impact not by kind of going in and helping but just kind of maybe, like, standing back a little bit and giving someone a thumbs up. So, definitely one of the biggest surprises or, I think, one of the biggest lessons learned for me in the past few weeks of doing this. STEPHANIE: That's very cool. JOËL: So, Stephanie, you've also been doing some pairing or some mentoring from what I hear. STEPHANIE: Yeah. So, on my current client work, I have been pairing with a new hire on my client team who recently graduated from college. And this is his first job in software development. And I have been thinking and learning a lot through this experience because one of my goals was to get better at coaching, specifically the idea of asking guiding questions to help someone, you know, arrive at their own solution instead of, you know, making the suggestions myself or kind of dictating where to go. And this has kind of been a progression for me of kind of starting from, well, you know, I have the way that I want to do it. And the person I'm working with who maybe has less experience, like, they might not know where to go. So, we're just going to go along with my idea. And then the next step was offering a few different ideas, like a menu of options and kind of having that discussion about which way to go. And now, I really wanting to practice letting someone else lead entirely and helping them start thinking about the right things but ultimately not giving them the answer. But hopefully, like, the questions I've been asking means that they are able to get to a well-informed answer where they've thought through some of the things that I would think about if I were in the position of making the decision or figuring out how to implement. JOËL: Is this mostly asking questions to get them to think about edge cases, or is this, like, a Socratic approach to teaching? STEPHANIE: Could you describe Socratic approach for me? JOËL: So, the Socratic approach is a teaching approach that is question-based, where you kind of help the student come to the conclusions themselves by answering questions rather than by telling them the answer. STEPHANIE: Oh, interesting. I think a little bit of both. Where it's true, I am able to see some edge cases that folks with less experience might not consider because they just haven't had to run into them before or fight the fires when [laughs] their code in production ends up being a big issue or causes a bug. But I think that's just part of the work where there is kind of, like, a default dynamic that might be fallen into when two people are working together, and their experience levels differ, where the person who has less experience is wanting to lean on the more senior person to tell them where to go, or to expect to be in that position of just learning from them and not necessarily doing as much of the active thinking. But I was really interested in flipping that and doing a bit of a role reversal because I think it can be really impactful and, you know, help folks earlier in their career, like, really level up even more quickly than just watching, but actually doing. And so, the questions I've been asking have been a lot more open-ended in terms of, like, asking, "What do you think about this code that we're looking at?" Or, like, "Where do you want to go next?" And based on, you know, their answers, digging in a little more, and, at the end, maybe, like, giving that validation that we were talking about earlier. I was like, "Great. Like, I think that's a great path forward," or, "I think that's a good idea to spend our time on right now." But the open-ended questions, I think, are also ones that I also would have liked when I was in that position of learning, where having someone trust that I could draw on my past experience but, like, also knowing that they were there to support and maybe orient me if I ended up straying too far off the path. JOËL: How have you navigated situations where maybe you're asking a question about "What do you want to do next?" and they pick something that maybe would work but is not your sort of preferred approach, or maybe something that seems like it would work well enough but, you know, there's maybe a better approach? How do you navigate that? Do you let them take their approach and maybe kind of let them run into some of the edge cases and problems and then say, "Hey, let me show you something new"? Do you probe a little bit earlier? Or do you say, "Hey, that's good, but why don't we try my way"? How do you navigate that kind of situation? STEPHANIE: That is so hard. It's really challenging. Because if you kind of know that there's maybe a more effective way, or a cleaner way, or whatever, and you're seeing your pair or your mentee kind of go down a different path, you know, it's so easy to just kind of jump in and be like, "Oh, actually, like, let me save you some time, and effort, and pain and just kind of tell you that there's something else we could try." But I think I've been trying to sit on my hands a little bit and let them go down that path or at least let them finish explaining kind of what their thought process is and giving them the opportunity to do that act of thinking to see it through without interrupting them because I think it's really important to, you know, just honor the process that they're going through. I will say, though, that I also try to keep an eye on the time. And I am also, like, holding in my head a bit of a higher level, like, the project status, any deadlines, what's on our plate for the sprint. And so, if I'm seeing that maybe the path they want to go down might end up taking a while or we don't quite have enough time for that, to then come back and revisit and adjust and reiterate on, like, their first solution. Then that is usually an opportunity where I might offer them another way or say, like, "Hey, like, this is what I'm thinking," because of those things I mentioned before with deadlines or something I'm considering. But I generally try not to impose any of that as, like, this is what we will do so much as saying, "This is what I think we should do." Because I really want to hone in on the idea that, like, everyone just has opinions [laughs] about how they want to do things. And I'm not claiming mine is the perfect way or even the best way, but just what I'm thinking in this moment. JOËL: Yeah, time permitting, I've really appreciated scenarios where you give people a chance to do the non-optimal solution and run into edge cases that kind of show why that solution is not optimal and then backtrack out of it and then go to the optimal path. I think that's a lesson that really sticks much longer. So, I've even done that in scenarios where I'm building some training material. And I'll kind of purposely have the group go down the sort of obvious path, but that turns out to be non-optimal. And then, you hit a wall where things don't work, and then you have to backtrack. And it's like, okay, so that's why we don't do it that way that may have seemed obvious. Because then everybody remembers as opposed to...I mean, you could just go down this other path, and somebody asks you a question, "Why don't we go down this thing?" And then, they just...maybe they have to remember it, or it becomes a thing where it's like, oh, but, like, we were told that's a bad way to do it. And now you have this sort of, like, weird, like, absolutism about, like, oh, but, you know, Joël said that was bad. So, we just got to remember that's the bad thing. And it's not about the morality of that choice that I think can come through when you're kind of declaring a path good and a path bad, but instead, having experienced, hey, we went down this path. There were some drawbacks to it, which is why we prefer this other path. And I think that tends to stick a lot more with students. STEPHANIE: Yeah. I really like what you said about not wanting to inject that, like, morality argument or even kind of deny them the opportunity to decide for themselves how they thought that path went or, like, how they thought the solution was. If you just tell them like, "No, don't go there," you're kind of closing the door on it. And, yeah, they might spend a lot of time afterwards thinking that, like, that will always be a bad option without really forming an opinion for themselves, which I think is really important. Because, you know, once you do get more experience, that is pretty much, like, the work [laughs] that we're doing all of the time. But another thing that I think is also such a skill is assessing your own work, like, after you go down the path or, like, once you have something working, being able to come back to it and look at it and be like, oh, like, can this be better, right? And I think that can only happen once you have something to look at, once you have, like, a first draft, if you will, or do the less optimal implementation or naive implementation. JOËL: So, when you're trying to prompt someone to kind of build that skill of self-review or self-reflection on some of the work that they've done, how do you as a pair or a mentor help stimulate that? STEPHANIE: Yeah. I think with early career folks, one thing that is an easy way to start the conversation is asking, "Are there any places that could be more readable?" Because that's, I think, an aspect that often gets forgotten because they're trying to hold so much in their heads that they are really just getting the code to work. And I think readability is something that we all kind of understand. It doesn't include any jargon about design patterns that they might not have learned yet. You know, even asking about extracting or refactoring might be not where they are at yet. And so, starting with readability, for example, often gets you some of those techniques that we've learned that have, you know, specialized vocabulary. But I have found that it helps meet them where they're at. And then, in time, when they do learn about those things, they can kind of apply what they've already been doing when kind of prompted with that question as, like, oh, it turns out that I was already kind of considering this in just a different form. JOËL: And I think one thing that you gain with experience is that you have kind of a live compiler or interpreter of the language in your head. And so, sometimes for more complex code, I, as an experienced developer, can look at it and immediately be like, oh yeah, here's some edge cases where this code isn't going to work that someone newer to the language would not have thought of. And so, sometimes the way I like to approach that is either ask about, "Oh, what happens in this scenario?" Or sometimes it's something along the lines of, "Hey, now that we've kind of done the main workflow, there's a couple of edge cases that I want to make sure also work. Let's write out a couple of test cases." So, I'll write a couple of unit tests for edge cases that I know will break the code. But even when we write the unit tests, my pair might assume that these tests will pass. And so, we'll write them; we'll run them and be like, "Oh no, look at that. They're red. I wonder why." And, you know, you don't want to do it in a patronizing way. But there's a way to do that that is, I think, really helpful. And then you can talk about, okay, well, why are these things failing? And what do we need to change about the code to make sure that we correctly handle those edge cases? STEPHANIE: Yeah, that's really great. And now, they also have learned a technique for figuring out how to move forward when they think there might be some edge cases. They're like, oh, I could write a test, and they end up [laughs] maybe learning how to do TDD along the way. But yeah, offering that strategy, I think, as a supplement to having supported them in their workflow, I think, is a really cool way to both help them learn a different strategy or tactic while also not asking them to, like, completely change the way that they do their development. JOËL: So, we've talked about ways that we can coach and mentor in a more of a one-on-one setting. But it can also happen in more of a group setting. And an initiative that I've been involved in recently is, once a quarter, the principals on thoughtbot's Boost team are running a training session on a topic that we choose. And we chose this month to make it really interactive. We created an exercise. We talked a little bit about it, had people break out into breakout rooms for a pretty short time—it was like 20 minutes—and come up with a solution. And then brought it back to the big group to talk through some of the solutions. All of that within 45 minutes, so it's a very kind of dense-packed thing. And I think it went really well. STEPHANIE: Yeah. So, hearing that makes me think that the group wasn't actually going to get to a solution in necessarily that short amount of time. But I'm wondering if that was maybe intentional. Like it was never really about coming to the optimal solution but just the act of thinking about it or practicing how you would do that problem-solving without as much of a focus on the outcome. JOËL: So, yes and no. I think, as you said, the discussion, the journey is more important than the outcome. But also, because we wanted people to have a realistic chance at coming up with some kind of solution, we specifically said, "We don't want code. Don't write a code solution to this." Instead, we suggested people come up with some kind of diagram. So, the problem was, we have some sort of business process where you start by...you have an endpoint that needs to receive some kind of shopping cart JSON and then goes through a few different steps. You have to validate it. You have to attempt to charge their card, and then eventually, it has to be sent off to a warehouse to be fulfilled. And so, we're asking them to diagram this while thinking a little bit about data modeling and a little bit about potential edge cases and errors. People came up with some really interesting diagrams for this because there's multiple different lenses from which you could approach that problem. STEPHANIE: That's cool. I really like that you left it up to the groups to figure out, you know, what kind of tools they wanted to use and the how. You mentioned different lenses. So, I'm taking it that you didn't necessarily share what the steps of starting to consider the data modeling would be. Did you prompt the group in any way? How did you set them up before they broke out? JOËL: So, we had a document that had a problem definition; part of this involved talking to a few external services, so things like attempting to charge their card. I think there was a user service they needed to do to pull some user information. And then, there's that fulfillment center that we submit to the warehouse with your completed order. And so, we had sample JSONs for all of these. Again, the goal is not for them to write any code that deals with it but more to think about: okay, we need information from this payload to plug into this one. And then, if they want to add any sort of intermediate steps, they can do that. And I think sort of two common lenses that you could look at this is from more of an action standpoint, so to say, okay, well, first, we receive this payload, and then we make a call to this endpoint, and we try to do a thing and then success or failure, and then kind of go down this path and success or failure, and kind of keep going down that path until you finally reach that fulfillment endpoint. So, it's almost like a control flow diagram. But you could also take more of a data-centered approach and talk about how the data evolves as it goes through this process. And so, you start with, like, a raw JSON payload. And maybe that gets parsed into a shopping cart object, which then gets turned into a temporary order, which then gets turned into a validated order, which then is combined with a credit card charge to create a fulfillment order, which can then be sent off to the warehouse. And that perspective will completely change the way you think about what the code actually needs to be when you create it. STEPHANIE: Got it. That's cool. So, I'm curious, you know, what went into figuring out what the prompt would look like? I guess, like, where did you start? Did you already know that there would be these two different ways of thinking about or lenses to data modeling that you're, like, oh, like, maybe these groups will go down this route? Or was it, I guess, a bit of a surprise that when you came together, you found out kind of the different approaches? JOËL: We already knew that there would be multiple approaches, and we chose not to specify which one to take. I think now this is getting into almost like curriculum design and more kind of the pedagogy side of things, which I'm, you know, excited and passionate about. I don't know, is that something that you've done at all for some of your projects or areas where you've been coaching people? STEPHANIE: It's not been. But I actually do think it's a bit of a goal of mine to lead a workshop at some point at a conference because I really like the hands-on stuff that I get to do day-to-day, you know, working one-on-one with people. And, you know, I also am on the conference circuit. [laughs] And I was thinking that maybe workshops could be a really cool way to bring together those two things of like, well, I am enjoying that experience of working one-on-one, but it is, oftentimes, you know, just on our regular day-to-day work. And so, I would be really curious about how to develop that kind of curriculum for teaching purposes. Do you find yourself starting with problems you see on client work and kind of stripping that down into something maybe a little more general, or do these problems kind of just come up spontaneously? [chuckles] JOËL: So, workshop design is, I think, its own really fascinating topic, and honestly, we could probably do a whole episode on it. But the short of it is I typically work backwards from an end goal. So, just like when I'm writing a blog post, I have one big thing I want people to learn from a workshop, and then everything works backwards from there. Anything that is part of the workshop has to be building towards that big goal, that one thing I want people to learn. Otherwise, I strip it out. So, it's an exercise in ruthlessly cutting to make sure that I'm not overwhelming people and, you know, that we can fit in the time that we have because there's always not enough time in a workshop. And people can very easily get sidetracked or overwhelmed. So, as much as possible, have everything focusing in towards one goal. Circling back to the mentoring side of things, I'm curious what you see is maybe some of the biggest challenges as a mentor or a coach. STEPHANIE: Well, I think, for me, it was, in some ways, like, seeing myself in that role as mentor. Like, oftentimes, that was decided for me by someone else as, like, "Oh, hey. We have a new hire, and, like, would you be their onboarding buddy?" Or, you know, a manager kind of identifying, like, oh, like, Stephanie has been in this role for, you know, a few years now. She's surely ready to mentor [laughs] new folks or people joining the team. And that was really hard for me because I was like, well, I still have so much to learn [laughs], you know, like, how could I possibly be in that position now? You know, I am still learning from all these other people who are mentors to me. So, one thing that took me a long time was learning that I did have things that I knew that other people didn't. And I started to think of it more as this, like, ring of overlapping circles where, you know, we all probably do share some common knowledge. But we all are also experts in different things, and everyone always has something to teach. Even if you're just, like, a few months or, like, a year ahead of someone else, that is actually a really powerful spot to cultivate peer mentorship, and where I think learning can really thrive. There's a really great talk about this by Adam Cuppy called Mentorship in Three Acts, where he talks about that peer mentorship, where someone just knows, like, a little more than someone else. That can be really powerful and can be a good entry point for people who are interested in getting into mentorship but are kind of worried that, like, oh, they are, you know, not a senior yet. You know, when you're at a similar experience level as who you're working with, there is a little bit less of what we were describing earlier of, like, that dynamic of knowing what to do but kind of wanting to hold back and let them discover for themselves. In that peer mentorship dynamic, you know, both people are, like, really deep in it, kind of trying things out, experimenting, learning, and that ends up being really fruitful time for both of them. JOËL: Based on your experience, would you say that maybe that's the best place to start for someone who's looking to get into mentorship, so kind of pursue more of a peer mentorship scenario? STEPHANIE: Yeah. I would definitely say that it has helped me a lot. I've had a lot of peer mentorship relationships in the past, where maybe there just wasn't someone on the team who could mentor me at the time. Or maybe I was wanting to collaborate a little bit more and feeling like I did have some ideas and opinions that I wanted to talk about, or share, or get some feedback on. Reaching across my level was really helpful in starting to create that space. Yeah, I was really surprised by all the things that I was learning and all the things that the other person was learning from me that I think was a good wealth of experience for me to then bring to the next step when I found myself kind of in that position of supporting others who were more junior. JOËL: I'd like to also shout out Exercism.io as a great place to get started with mentoring. For those who are not aware, Exercism is a platform where they have a bunch of exercises that you can go through to learn a language. And you can go through them on your own, but you can also go through them with a mentor. Somebody will basically give you a little mini code review on your exercise or maybe help you out if you're stuck. And this all happens asynchronously. And it's volunteer-run. So, they just have people from the community who volunteer to be mentors on there to help coach people through the exercises. We'll put a link in the show notes to the page they have, kind of explaining how the mentorship works and how to sign up. But I did that for a while. And it was a really rewarding experience for me. I thought that I'd be mostly helping and teaching, but honestly, I learned so much as part of the process. So, I would strongly recommend that to anybody who wants to maybe dip their toe a little bit in the mentoring coaching world but maybe feels like they're not quite ready for it. I think it's a great way to start. STEPHANIE: Ooh, that sounds really cool. Yeah, I know that, especially for folks who maybe are working a little bit more independently, or are a bit isolated, or don't have a lot of people on a team that they're able to access; that sounds like a really great solution for folks who are looking for that kind of support outside of their immediate circle. On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël shares he has been getting more into long-form reading. Stephanie talks about the challenges she faced in a new project that required integrating with another company's system. Together, they delve into the importance of search techniques for developers, covering various approaches to finding information online. Domain Modeling Made Functional (https://pragprog.com/titles/swdddf/domain-modeling-made-functional/) Episode on heuristics (https://www.bikeshed.fm/398) Episode on specialized vocabulary (https://www.bikeshed.fm/356) Episode on discrete math (https://www.bikeshed.fm/374) Joël's discrete math talk at RailsConf (https://www.youtube.com/watch?v=wzYYT40T8G8) Dash (https://kapeli.com/dash) Alfred (https://www.alfredapp.com/) Indiana Jones and the Crypt of Cryptic Error Messages (https://thoughtbot.com/blog/indiana-jones-and-the-crypt-of-cryptic-error-messages) Browser History confessional by Kevin Murphy (https://www.youtube.com/watch?v=R7LkHjJdH9o) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: Something I've been trying to do recently is get more into long-form reading. I read quite a bit of technical content, but most of it are short articles, blog posts, that kind of thing. And I've not read, like, an actual software-related book in a few years, or at least not completed a software-related book. I've started a few chapters in a few. So, something I've been trying to do recently is set aside some time. It's on my calendar. Every week, I've got an hour sit down, read a long-form book, and take notes. STEPHANIE: That's really cool. I actually really enjoy reading technical stuff in a long-form format. In fact, I was similarly kind of trying to do it, you know, once a week, spend a little bit of time in the mornings. And what was really nice about that is, especially if I had, like, a physical copy of the book, I could close my computer and just be completely focused on the content itself. I also love blog posts and articles. We are always talking on the show about, you know, stuff we've read on the internet. But I think there's something very comprehensive, and you can dig really deep and get a very deeper understanding of a topic through a book that kind of has that continuity. JOËL: Right. You can build up a larger idea have more depth. A larger idea can also cover more breadth. A good blog post, typically, is very focused on a single thing, the kind of thing that would really probably only be a single chapter in a book. STEPHANIE: Has your note-taking system differed when you're applying it to something longer than just an article? JOËL: So, what I try to do when I'm reading is I have just one giant note for the whole book. And I'm not trying to capture elements or, like, summarize a chapter necessarily. Instead, I'm trying to capture connections that I make. So, if there's a concept or an argument that reminds me of something perhaps similar in a different domain or a similar argument that I saw made by someone else in a different place, I'll capture notes on that. Or maybe it reminds me of a diagram that I drew the other day or of some work I did on a client six months ago. And so, it's capturing all those connections is what I'm trying to do in my notes. And then, later on, I can kind of go back and synthesize those and say, okay, is there anything interesting here that I might want to pull out as an actual kind of idea note in my larger note-taking system? STEPHANIE: Cool, yeah. I also do a similar thing where I have one big note for the whole book. And when I was doing this, I was even trying to summarize each chapter if I could or at least like jot down some takeaways or some insights or lines that I like felt were really compelling to me. And, like, something I would want to, in some ways, like, have created some, like, marker for me to remember, oh, I really liked something in this chapter. And then, from there, if I didn't capture the whole idea in my note, I knew where I could go to revisit the content. JOËL: And did you find that was helpful for you when you came back to the book? STEPHANIE: Yeah, it did. I usually can recall how, like, I felt reading something. You know, if something was really inspiring to me or really relatable, I can recall that, like, I had that experience or emotion. And it's just, like, trying to find where that was and that this is a system that has worked well for me. Though, I will say that summarizing each chapter did kind of remind me of, like, how we learned how to take notes in school. [laughs] And I think, you know, middle school, or whatever, I recall a particular note-taking format, where you, you know, split the page up into, like, an outline with all the chapters, and you tried to summarize it. And so, it did feel a little bit like homework [laughs]. But I can also see the value in why they taught me how to do that. JOËL: I was recently having a conversation with someone else about the idea of almost, like, assigning yourself the college-style essay question after finishing a book to try to synthesize what you learned. STEPHANIE: Whoa, that's really cool. I can see how that would really, like, push you to synthesize and process what you might have just consumed. And, also, I'm so glad I'm not in school anymore [laughs] so that I don't have to do that on a regular basis. [laughs] I'm curious, Joël, what book are you reading right now? JOËL: I've been reading Domain Modeling Made Functional, which is a really interesting intersection between functional programming, Domain-Driven Design (DDD), and a lot of interesting kind of type theory. And so, that sort of intersection of those three Venn diagrams leads to this really fascinating book that I've been going through. And I think it connects with a lot of other things that I've been thinking about. So, I'll be reading and be like, oh, this reminds me of this concept that we have in test-driven development. Or this reminds me of this idea that we do when we do a product design sprint. And this reminds me of this principle from object-oriented design. And now I'm starting to make all these really interesting connections. STEPHANIE: Awesome. Well, I hope to hear more about what you've learned or kind of what you're thinking about going through this book in future episodes. JOËL: This is not the last time we hear about this book, I'm pretty sure. So, Stephanie, what's new in your world? STEPHANIE: So, I have a little bit of a work update to share. So, lately, I've been brought in to work on a feature that is integrating with another company's system. And the way that I was brought into this work was honestly just being assigned a task. And I was picking up this work, and I was kind of going through the requirements that had been specked out for me, and I was trying to get started. And then, I realized that I actually had a lot of questions. It just wasn't quite fully fleshed out for the level of detail that I needed for implementing. And for the past couple of weeks, we've been chatting in Slack back and forth as I tried to get some of my questions answered. They are trying to help me, but also the things that I'm saying end up confusing them as well. And then, I end up having to try and figure out what they're looking for in order to properly respond to them. And I had not met these people before. These are folks from that other company. And, you know, I'd only just seen their little Slack profile pictures. So, I didn't know who they were. I didn't know what role they had and kind of, like, what perspective they were coming to these conversations from. And after a while, I was feeling a little stressed out because we just kept having this back and forth, and not a lot of answers were coming to fruition. And I really ended up needing the nudge of the manager on my client team to set up a meeting for us to all just talk synchronously. And I think I had...not that I had been avoiding it necessarily, but I guess I was under the impression that we were at the point where we could just, you know, shoot off a question in Slack and that there would be a clear path forward. But the more we kept pulling on that thread, the more I realized that, oh, like, we have a lot of ambiguity here. And it really helped to meet them finally, not in person but, like, over a video call. [laughs] So, this happened yesterday. And, you know, even just, like, going around doing introductions, like, sharing what their role was at the company helped me just understand, like, who I was talking to. You know, I realized, oh, like, the level of technical details that I had been providing was maybe too much for this group. And I was able to have a better understanding of what their needs were, like hearing kind of the problem that they had on their end. And I realized that, oh, like, they actually aren't going to provide me the details for implementation that I was looking for. That's up to me. But at least now I know what their higher-level needs are so that I can make the most informed decisions that I can. JOËL: Fascinating. So, you thought that this was going to be, like, the technical team you're going to work with. And it turns out that this was not who they were. STEPHANIE: In some ways. I think I thought by providing more technical details that would be helpful, but it ended up being more confusing for them. And I think I was similarly kind of frustrated because the ways that I was asking questions or communicating also wasn't getting me the answers that I needed as well. But I felt really great after the meeting because I'm like, wow, you know, it doesn't have to be as stressful. You know, when you start getting into that back and forth on Slack, at least I find it a bit stressful. And it turns out that the antidote to that was just getting together and getting to know each other and hashing out the ambiguity, which does seem to work better in a more synchronous format. JOËL: Do you have kind of a preference for synchronous versus asynchronous when it comes to communication? STEPHANIE: That's a good question. I think it's kind of a pendulum for me. I'm in my asynchronous communication is a bit better for me right now phase, but only because I am just so burnt out on meetings a lot of the time that I'm like, oh, like, I really don't want to add another meeting to my calendar, especially because...I amend my statement; I'm burned out of meetings that don't go well. [laughs] And this meeting, in particular, was different because, you know, I realized, like, oh, like, we are not on the same page, and so how can we get there? And kind of making sure that we were focused on that as an agenda. And I found that ultimately worked out better than the async situation that I was describing, which I'm thinking now, you know when things aren't clear, text-based communication certainly does not help with that. JOËL: So, meetings, sometimes they're actually good. STEPHANIE: Yeah, that's my enlightened discovery this week. JOËL: So, this episode is kind of a special one. We've just hit 400 episodes of The Bike Shed. So, this is episode number 400. It's also my 50th Episode as a co-host. STEPHANIE: Right. That's a huge deal. 400 is a really big number. I don't know if I've ever done 400 of anything before [laughs]. JOËL: The Bike Shed has been going on for almost ten years now. The first episode up on the website is from October 31st, 2014, so just about nine years from that first episode. STEPHANIE: Wow. And it's still going strong. That's really awesome. I think it's really special to be a part of something that has been going on for this long. And, I don't know, maybe there are still listeners today from back in 2014. I would be really excited to hear if anyone out there has been listening to The Bike Shed throughout its whole lifespan. That's really cool. JOËL: Looking back over the last 50-ish episodes you and I have done, do you have a favorite episode that we've recorded? STEPHANIE: This may be a bit of recency bias. But the episode that we did about Software Heuristics I really enjoyed. Because I think we got to bring to the table some of the things we believe and the way we like to do things and kind of compare and contrast that with each other. And I always find people's processes very fascinating. Like, I want to know how you think and where your brain is at when you approach a problem. So, I really enjoyed that topic. What about you? Do you have any highlight episodes? JOËL: I think there's probably two for me. One is the episode that you and I did on Specialized Vocabulary. I think this really touched on a lot of really interesting aspects of writing software that's going to scale, software that works for a team, and also kind of personal growth and exploration. The second one that I think was really fun was the episode I did with Sara Jackson as a guest talking about Discrete Math because that's an episode that I got really excited about the topic. And right after recording the episode, it was the last day of the call for proposals for RailsConf. And I just took that raw excitement, put together a proposal, hit submit before the deadline. And it got accepted and got turned into a talk that I got to give on stage. So, that was, like, just a really fun journey from exciting episode with Sara and then, like, randomly turned into a conference talk. STEPHANIE: That's awesome. That makes me feel so happy. Because it just reminds me about how the stuff we talk about on the show can really resonate with people, you know, enough to become a conference talk that people want to attend. And I also really like that a lot of the topics we've gotten into in the past 50 episodes when we've taken over the show have been a bit more evergreen and just about, you know, the software development experience and a little bit less tied to specific news within the community. Speaking of evergreen topics, today, I wanted to discuss with you an evergreen software skill, and that is searching or Search-Driven Development, even if you will. JOËL: Gotta always get that three-letter acronym, something DD. STEPHANIE: Yeah. I am really curious about how we're going to approach this topic because a lot of folks might joke that a big part of writing software is knowing what to Google. Do you agree with that statement or not? JOËL: Yes and no. There's definitely value in knowing what to Google. It really depends on the kind of work that you're doing. I find that I don't Google that much these days. There are other tools that I use when I'm particularly, like, searching through documentation, but they tend to be less sort of open-ended questions and more where it's like, oh, let's get the actual documentation for this particular class or this particular method from the standard library. STEPHANIE: Oh, interesting. I like that you pointed out that there are different scopes of things you might want to search for. So, am I hearing correctly that when you have something specific in mind that you are just trying to recall or wanting to look up, you know, you're still using search that way, but less so if you are trying to figure out how to approach solving a problem? JOËL: So, oftentimes, if I'm working with a language that I already have familiarity with or a framework that I have familiarity with, I'm going to lean on something more specific. So, I'm going to say, okay, well, I don't exactly remember, like, the argument order for Enumerable's inject method. Is it memo then item, or item then memo? So, I'll just look it up. But I know that the inject method exists. I know what it does. I just don't remember the exact specifics of how to do that. Or maybe I want to write a file to disk, and I don't remember the exact method or syntax to do that. There are some ways that you can do it using a bunch of instance methods. But I think there's also a class method that allows you to kind of do it all at once. So, maybe I just want to look up the documentation for the file class in Ruby and read through that a little bit. That's the kind of thing where I suppose I could also Google, you know, how to save file Ruby, something like that. But for those sorts of things where I already roughly know what I want to do, I find it's often easier just to go directly to the docs. STEPHANIE: Yeah, yeah, that's a great tip. And I actually have a little shortcut to share. I started using DuckDuckGo as my search engine in the past year or so. And there's this really cool feature called Bangs for directly searching on specific sites. From my search bar, I can do, let's say, bang Rails and then my query. And it will search directly the Rails Guides website for me instead of, you know, just showing the normal other results that might come up in my regular search engine. And the same goes for bang Ruby doc. That one shows ruby-doc.org, which is my preferred [laughs] Ruby documentation website. I've really been enjoying it because, you know, it just takes that extra step out of having to either navigate to the site itself first or starting more broadly with my search engine and then just scrolling to find the site that I'm looking for. JOËL: Yeah. I think having some kind of dedicated flow helps a lot. I have a system that I use on my machine. It is Mac-specific. But I use a combination of the application Dash and the application Alfred. It allows me, with just a few keyboard shortcuts, to type out language names. So, I might say, you know, Ruby inject, and then it'll show me all the classes that have that method defined on it, hit Enter, and it pops up the documentation. It's downloaded on my machine, so it works offline. And it's just, you know, a few key presses. And that works really nicely for me. STEPHANIE: Oh, offline search. That's really nice. Because then if you're coding on a plane or something, then [laughs] you don't have to be blocked because you can't look up that little, small piece of information you need to move forward. That's very cool. JOËL: That is really cool. I don't know how often I've really leaned into the offline part of it. I don't know about you; I feel like I don't code on airplanes as much as I thought I would. STEPHANIE: That's fair. I also don't code on airplanes, but the idea that I could is very compelling to me. [laughs] JOËL: Absolutely. So, that's the kind of searches that I tend to do when I'm working in a language that I already know, kind of a day-to-day language that I'm using, or a framework that I'm already pretty familiar with. And this is just looking at all the things I haven't gotten to the point where I've fully memorized, but I have a good understanding of. What about situations where maybe you're a little bit less familiar with? So maybe it's a new framework, or even, like, a situation where you're not really sure how to proceed. How do you search when there's more uncertainty? STEPHANIE: Yeah, that's a good question. I do think I start a bit naively. The reason that we're able to be more specific and know exactly where to go is because we've built up this experience over time of scrolling through search results and clicking, you know, maybe all of them on the first page, even, and looking at them and being like, oh, like, this is not what I want. And then, seeing something else, it's like, oh, this is more helpful and kind of arrived at sources that we trust. And so, if it's something new, I don't really mind just going for a basic search, right? And starting more broadly might even be helpful in that process of building up the experience to figure out which places are reputable for the thing that I'm trying to figure out. JOËL: Yeah, especially when there's a whole new landscape, right? You don't really know what are the places that have good information and the ones that don't. For some things, there might be, like, an obvious first place to start. So, recently, I was on a project where I was trying to do an integration between a Rails app and a Snowflake data warehouse. And so, the first thing I did—I'm not randomly Googling—I went to the Snowflake website, their developer portal, and started reading through documentation for things. Unfortunately, a lot of the documentation is a bit more corporatey and not really helpful for Ruby-specific implementation. So, there's a few pieces that were useful. There were some links that they had that sent me to some good places. But beyond that, I did have to drop to Google search and try to find out what kinds of other things the community had done that could be helpful. Now, that first pass, though, did teach me some interesting things. It gave me some good keywords to search for. So, more than just Ruby plus Snowflake or something like that like, I knew that I likely was going to want to do some kind of connection via ODBC. So, now I could say, okay, Ruby plus ODBC integration, or Ruby plus ODBC driver and see what's happening there. And it turns out that one of the really common use cases for ODBC and Ruby is specifically to talk to Snowflake. And one of the top results was an article saying, "Hey, here's how you can use ODBC to get your Rails app to talk to Rails." And then I knew I struck gold. STEPHANIE: That's really cool. The thing that I was picking up on in what you were saying is the idea of finding what is most relevant to you. And maybe that is something that the algorithm serves you because, like, it's, like, what a lot of people are searching for, you know, a lot of people are engaging with, or matching with all these keywords that you're using. My little hack that I've been [chuckles] using is to use Slack and lean on other people who have maybe a little more, even just, like, a little more experience than me on the subject, and seeing, like, what things they're linking to, and what resources they're sharing. And I've found that to be really helpful as a place to start. Because, at that point like, my co-workers are narrowing down the really broad landscape for me. JOËL: I really like how you're sort of you're redefining the question a little bit here. And that, I think, when we talk about search, there's almost this implicit assumption that search is going to be searching the public internet through Google or some other alternative search engine. But you're talking about actually searching from my private corpus of data, in this case, either thoughtbot or maybe the client's Slack conversations, and pulling up information there that might be much more relevant or much more specific to the work that you're trying to do. STEPHANIE: Yeah. In some ways, I like to think of it as crowd-sourced but, like, a crowd that I trust and, you know, know is relevant to me and what I'm working on. I actually have a fun fact for you. Did you know that Slack is actually an acronym? JOËL: No, I did not know that. What does it stand for? STEPHANIE: It stands for Searchable Log of All Communication and Knowledge. JOËL: That is incredibly clever. I wonder, is this the thing where they came up with that when they made the original name? Or did someone go back later on, you know, a few years into Slack's life and was like, you know what? Our name could be a cool acronym; here's an idea. STEPHANIE: I'm pretty sure it was created in Slack's early days. And I think it might have even helped decide that Slack was going to be called Slack as opposed to some of the other contenders for the name of the software. But I think it's very accurate. And that could just be how I use Slack. I'm a very heavy search power user in Slack. [laughs]. So, I find it very apt. You know, obviously, I use it a lot for finding conversations that happened. But I really do enjoy it as a source of discovery for a specific topic, or, you know, technical question or idea that I'm wanting to just, like, filter down a little bit beyond, like you said, the public internet. In fact, I have found it really useful for when you encounter errors that actually are specific to your domain or your app. Obviously like, you will probably be less successful searching in your search engine for that because it includes, you know, context from your app that other people in the world don't have. But once you are narrowing it down to people at your company, I've been able to get over a lot of troubleshooting humps that way by searching in Slack because likely someone within my team has encountered it before. JOËL: So, you mentioned searching for error messages in particular. And I feel like that is, like, its own, like, very specific searching skill separate from more general, like, how do I X-style questions. Does that distinction kind of line up with your mental map of the searching landscape? STEPHANIE: Yeah. I guess the way that I just talked about it now was potentially a bit confusing because I was saying instead of how you might search for errors normally, but I did not talk about how you might search for errors normally. [laughs] But specifically, you know, if I'm popping error messages into my search engine, I am removing the parts of the stack trace that are specific to my app, right? Because I know that that will only kind of, like, clutter up my query and not be getting me towards a more helpful answer as to the source of my issue, especially if the issue is not my application code. JOËL: Right. I want to give a shout-out to an article on the thoughtbot Blog with a wonderful name: Indiana Jones and the Crypt of Cryptic Error Messages by Louis Antonopoulos. All about how to take an error message that you get from some process in your console and how to make that give you results when you paste it into a search engine. STEPHANIE: I love that name. Very cool. JOËL: So, you've talked a little bit about the idea of searching some things that are not on the public internet. How do you feel about kind of internet knowledge bases, private wikis, that kind of thing? Have you had good success searching through those kinds of things? STEPHANIE: Hmm, I would say mixed success, to be honest. But that's because of maybe more so the way that a team or a company documents information. The reason I say mixed results is because, a lot of the time, the results are outdated, and they're no longer relevant to me. And it doesn't take that much time to pass for something to become outdated, right? Because, like, the code is always changing. And if, you know, someone didn't go and update the documentation about the way that a system has changed, then I usually have to take the stuff that I'm kind of seeing in private wikis with a bit more skepticism, I would say. JOËL: Yeah, I think my experience mirrors yours as well. Also, some private wikis have just become absolutely huge. And so, searches just return a lot of results that are not really relevant to what I'm searching for. The searching algorithms that these systems use are often much less powerful than something like Google. So, they often don't sort results in a way that are bringing relevant things up to the top. So, it's more work to kind of sift through all of the things I don't care about. STEPHANIE: Yeah, bringing up the size of a wiki and, like, all of the pages, that is a good point because I see a lot of duplicate stuff, but that's just, like, slightly different. So, I'm not sure which one I'm supposed to believe. One really funny encounter that I had with a private wiki, or actually it was, like, a knowledge base article that was for the internal team...it was documenting actually a code process. So, it was documenting in more human-readable terms, like the steps an algorithm took to determine some result. But the whole document was prefaced by, "This information came from an email that was sent way long ago." [laughs] JOËL: That's an epic start to a Wiki article. STEPHANIE: Yeah. And there was another really funny line that said, "The reason for this logic is because of a decision made by (This person's name.)," like a business decision that (some random person name). No last name either, so I have no idea [laughs] who they could be referring to and any of the, like, historical context of why that happened. But I thought it was really funny as just a piece of, like, an artifact, of, at the time, when this was written, that meant something to someone, and that knowledge kind of has been diluted [laughs] over the years. JOËL: Yeah, internal wikis, I feel like, are full of that, especially if they've had a few years to grow and the company has changed and evolved. So, now it's time for hot takes. STEPHANIE: Yeah, I'm ready for them. JOËL: We are now in the fancy, new age of AI. Is ChatGPT going to make all of this episode obsolete? STEPHANIE: I'm going to say no, but I'm also biased, and I'm not a ChatGPT enthusiast. I've said it on air. [laughs] I can't even say that I've used it. So, that's kind of where I'm coming from with all this. But I have heard from folks that, convenient as it may be, it is not always 100% accurate or successful. And I think that one of the things I really like about kind of having agency over my search is that I can verify, as a human, the information that I'm seeing. So, you know, when you're, like, browsing a bunch of Stack Overflow questions and you see, you know, all these answers, at least you can, like, do a little bit of, like, investigation using context clues about who is answering the question, you know, like, what experience might they have? If you encounter something on a blog post, for example, you can go to the about page on this person's blog and be like, who are you? [chuckles] And, like, what qualifies you to give this information? And I think that is really valuable for me in terms of evaluating whether I want to go down a path based on what I'm seeing. JOËL: So, I've played with it a tiny, little bit, so not enough to have a good sample size. And I think it can be interesting for some of those less constrained kind of how do I style questions. I'm not necessarily looking for, like, an exact code sample. But even if it just points me towards, oh, I need to be looking at this particular class in this standard library and read through that documentation to build the thing that I want. Or maybe it links me to kind of the classic blog posts that people refer to when talking about this thing. It's a good way sometimes to just narrow down when you're kind of faced with, you know, the infinity of the internet, and you're kind of like, oh, I don't even know where to start. It gives you some keywords or some threads to follow up on that I think can be really interesting. STEPHANIE: The infinity of the internet. I love that phrase. I don't think I've heard it before, but it's very evocative for me [laughs]. And I like what you said about it helping you give a direction and to kind of surface those keywords. In fact, it almost kind of sounds like what I was mentioning earlier about using Slack for, right? And, in that case, the hive mind that I'm pulling from is my co-workers. But also, I can see how powerful it would be to leverage a tool that is guiding you based on the software community at large. JOËL: Something I'd be curious to maybe lean into a little bit more are some of those slightly more specified questions where it does give you a code snippet, so something like writing a file to disk where, right now, it's, you know, five characters. I just pop up Alfred and type up Ruby F, and it gives you the file docs, and it's, you know, right there. There's usually an example at the top of the file. I copy-paste that and get working. But maybe this would be a situation where some AI-assisted tools would be better. It could be searching through something like ChatGPT. It could be maybe even something like Co-pilot, where, you know, you just start typing a little bit, and it just fills out that skeleton of, like, oh, you want to write a file to disk in Ruby. Here's how it's typically done. STEPHANIE: Yeah, you bring up a good point that, in some ways, even the approaches to searching we were talking about originally is still just building off of algorithms helping us to find what we're looking for, right? Though, I did really want to recommend an awesome talk from Kevin Murphy, from a RailsConf a couple of years ago, that's called Browser History Confessional: Searching My Recent Searches. The main message that I really enjoyed from this talk was the idea of thinking about what you're searching for and why because that will, I think, help add a bit of, like, intentionality into that process. You know, it can be very overwhelming, but let that guide you a little bit. One of the things that he mentions is the idea of revisiting your own assumptions with search. So, even if you think you know how to do something, or you might even know, like, how you might want to do it, just going to search to see if there's any other implementations that you haven't thought of that other people are doing that might inform how you approach a problem, or at least, like, make you feel even more confident about your original approach in the first place. I thought that was really cool. That's not something that I do now, but definitely, something that I want to try is to be, like, I think I know how to do this, but let me see what other people are doing because that might spark something new. JOËL: We'll put a link in the show notes to this talk. But I was lucky enough to see it in person. And also would like to second that recommendation. It is worth watching. From this conversation that you and I have had, I'm having, like, two main takeaways. One is kind of what you just said, the idea of being a little bit more cognizant of, what kind of search am I doing? Is this a sort of broad how do I X, where I don't even really know where to start? Is this, like, something really specific where you just don't know what kind of syntax you want to use? Is it an error message where you just want to see what other people have done when they've encountered this? Or any other, like, more specific subcategories. And how being aware of that can help you search more effectively. And secondly, don't limit yourself to the public internet. There's a lot of great information in your company's Slack or other instant messaging service, maybe some kind of documentation system internal, some kind of wiki. And those can be a great place to search as well. STEPHANIE: If we missed any other cool searching tips or tricks or ways that we might be able to improve our processes for searching as developers, I would really love to hear about them. So, if any listeners out there want to write in with their thoughts, that would be super awesome. On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeee!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël has been fighting a frustrating bug where he's integrating with a third-party database, and some queries just crash. Stephanie shares her own debugging story about a leaky stub that caused flaky tests. Additionally, they discuss the build vs. buy decision when integrating with third-party systems. They consider the time and cost implications of building their own integration versus using off-the-shelf components and conclude that the decision often depends on the specific needs and priorities of the project, including how quickly a solution is needed and whether the integration is core to the business's value proposition. Ruby class instance variables (https://www.codegram.com/blog/understanding-class-instance-variables-in-ruby/) Build vs Buy by Josh Clayton (https://thoughtbot.com/blog/build-vs-buy-considerations-for-new-products) Sustainable Rails (https://sustainable-rails.com/) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: My world has been kind of frustrating recently. I've been fighting a really frustrating bug where I'm integrating with a third-party database. And there are queries that just straight-up crash. Any query that instantiates an instance of an ActiveRecord object will just straight-up fail. And that's because before, we make the actual query, almost like a preflight query that fetches the schema of the database, particularly the list of tables that the database has, and there's something in this schema that the code doesn't like, and everything just crashes. Specifically, I'm using an ODBC connection. I forget exactly what the acronym stands for, Open Database connection, maybe? Which is a standard put up by Microsoft. The way I'm integrating it via Ruby is there's a gem that's a C extension. And somewhere deep in the C extension, this whole thing is crashing. So, I've had to sort of dust off some C a little bit to look through. And it's not super clear exactly why things are crashing. So, I've spent several days trying to figure out what's going on there. And it's been really cryptic. STEPHANIE: Yeah, that does sound frustrating. And it seems like maybe you are a little bit out of your depth in terms of your usual tools for figuring out a bug are not so helpful here. JOËL: Yeah, yeah. It's a lot harder to just go through and put in a print or a debug statement because now I have to recompile some C. And, you know, you can mess around with some things by passing different flags. But it is a lot more difficult than just doing, like, a bundle open and binding to RB in the code. My ultimate solution was asking for help. So, I got another thoughtboter to help me, and we paired on it. We got to a solution that worked. And then, right before I went to deploy this change, because this was breaking on the staging website, I refreshed the website just to make sure that everything was breaking before I pushed the fix to see that everything is working. This is a habit I've picked up from test-driven development. You always want to see your test break before you see it succeed. And this is a situation where this habit paid off because the website was just working. My changes were not deployed. It just started working again. Now it's gotten me just completely questioning whether my solution fixes anything. The difficulty is because I am integrating [inaudible 03:20] third-party database; it's non-deterministic. The schema on there is changing rather frequently. I think the reason things are crashing is because there's some kind of bad data or data that the ODBC adapter doesn't like in this third-party system. But it just got introduced one day; everything started breaking, and then somehow it got removed, and everything is working again without any input or code changes on my end. So, now I don't trust my fix. STEPHANIE: Oh no. Yeah, I would struggle with that because your reality has come crashing down, [laughs] or how you understood reality. That's tough. Where do you think you'll go from here? If it's no longer really an issue in this current state of the schema, is it worth pursuing further at this time? JOËL: So, that's interesting because it turns into a prioritization problem. And for this particular project, with the deadlines that we have, we've decided it's not worth it. I've opened up a PR with my fix, with some pretty in-depth documentation for why I thought that was the fix and what I think the underlying problem is. If this shows up again in the next few days, I'll have that PR that I can pull in and see if it fixes things, and if it doesn't, I'll probably just close that PR, but it'll be available for us if we ever run into this again. I've also looked at a few potential mitigating situations. Part of the problem is that this is a, like, massive system. The Rails app that I'm using really doesn't need to deal with this massive database. I think there's, you know, almost 1,000 tables, and I really only care about a subset of tables in, like, one underlying schema. And so, I think by reducing the permissions of my database user to only those tables that I care about, there's a lower chance of me triggering something like this. STEPHANIE: Interesting. What you mentioned about, you know, having that PR continue to exist will be really helpful for future folks who might come across the same problem, right? Because then they can see, like, all of the research and investigation you've already done. And you may have already done this, but if you do think it's a schema issue, I'm curious about whether the snapshot of the schema could be captured from when it was failing to when it has magically gotten fixed. And I wonder if there may be some clues there for some future investigator. JOËL: Yeah. I'm not sure what our backup situation is because this is a third-party system, so I'd have to figure out what things are like in the admin interface there. But yeah, if there is some kind of auditing, or snapshots, or backups, or something there, and I have rough, you know, if I know it's within a 24-hour period, maybe there's something there that would tell me what's happening. My best guess is that there's some string that is longer than expected or maybe being marked as a CHAR when it should be a VARCHAR, or maybe something that's not a non-UTF-8 encoded character, or something weird like that. So, I never know exactly what was wrong in the schema. There's some weird string thing happening that's causing the Ruby adapter to blow up. STEPHANIE: That also feels so unsatisfying [laughs] for you. I could imagine. JOËL: Yeah, there's no, like, clean resolution, right? It's a, well, the bug is gone for now. We're trying to make it less likely for it to pop up again in the future. I'm trying to leave some documentation for the next person who's going to come along, and I'm moving forward, fingers crossed. Is that something you've ever had to do on one of your projects? STEPHANIE: Given up? Yes. [laughter] I think I have definitely had to learn how to timebox debugging and have some action items for when I just can't figure it out. And, you know, like we mentioned, leaving some documentation for the next person to pick up, adding some additional logging so that maybe we can get more clues next time. But, you know, realizing that I do have to move on and that's the best that I can do is really challenging. JOËL: So, you used two words here to describe the situation: one was giving up, and the other one was timebox. I think I really like the idea of describing this as timeboxing. Giving up feels kind of like, defeatist. You know, there's so many things that we can do with our time, and we really have to be strategic with how we prioritize. So, I like the idea of describing this as a timeboxing situation. STEPHANIE: Yeah, I agree. Maybe I should celebrate every time that I successfully timebox something [laughs] according to how I planned to. [laughs] JOËL: There's always room to extend the timebox, right? STEPHANIE: [laughs] It's funny you bring up a debugging mystery because I have one of my own to share today. And I do have to say that it ended up being resolved, [chuckles] so it was a win in my book. But I will call this the case of the leaky stub. JOËL: That sounds slightly scary. STEPHANIE: It really was. The premise of what we were trying to figure out here was that we were having some flaky tests that were failing with a runtime error, so that was already kind of interesting. But it was quickly determined it was flaky because of the tests running in a certain order, so-- JOËL: Classic. STEPHANIE: Right. So, I knew something was happening, and any tests that came after it were running into this error. And I was taking a look, and I figured out how to recreate it. And we even isolated to the test itself that was running before everything else, that would then cause some problems. And so, looking into this test, I saw that it was stubbing the find method on an ActiveRecord model. JOËL: Interesting. STEPHANIE: Yeah. And the stubbed value that we were choosing to return ended up being referenced in the tests that followed. So, that was really strange to me because it went against everything I understood about how RSpec cleans up stubs between tests, right? JOËL: Yeah, that is really strange. STEPHANIE: Yeah, and I knew that it was referencing the stub value because we had set a really custom, like, ID value to it. So, when I was seeing this exact ID value showing up in a test that seemed totally unrelated, that was kind of a clue that there was some leakage happening. JOËL: So, what did you do next? STEPHANIE: The next discovery was that the error was actually raised in the factory setup for the failing tests and not even getting to running the examples at all. So, that was really strange. And digging into the factories was also its own adventure because there was a lot of complexity in the factories. A lot of them used hooks as well that then called some application code. And it was a wild goose chase. But ultimately, I realized that in the factory setup, we were calling some application code for that model where we had stubbed the find, and it had used the find method to memoize a class instance variable. JOËL: Oh no. I can see where this is going. STEPHANIE: Yeah. So, at some point, our model.find() returned our, you know, stub value that we had wanted in the previous test. And it got cached and just continued to leak into everything else that eventually would try to call that memoized method when it really should have tried to do that look-up for a separate record. JOËL: And class instance variables will persist between tests as long as they're on the same thread, right? STEPHANIE: Yeah, as far as I understand it. JOËL: That sounds like a really frustrating journey. And then that moment when you see the class instance variable, and you're like, oh no, I can't believe this is happening. STEPHANIE: Right? It was a real recipe for disaster, I think, where we had some, you know, really complicated factories. We had some sneaky caching issues, and this, you know, totally seemingly random runtime error that was being raised. And it was a real wild goose chase because there was not a lot of directness in going down the debugging path. I feel like I went around all over the codebase to get to the root of it. And, in the end, you know, we were trying to come up with some takeaways. And what was unfortunate was that you know, like, normally, stubbing find can be okay if you are, you know, really wanting to make sure that you are returning your mocked value that you may have, like, stubbed some other stuff on in your test. But because of all this, we were like, well, should we just not stub find on this really particular model? And that didn't seem particularly sustainable to make as a takeaway for other developers who want to avoid this problem. So, in the end, I think we scoped the stub to be a little more specific with the arguments that we wanted to target. And that was the way that we went forward with the particular flaky test at hand. JOËL: It sounds like the root cause of the problem was not so much the stub as it was the fact that this value is getting cached at the class level. Is that right? STEPHANIE: Yes and no. It seems like a real pain for running the tests. But I'm assuming that it was done for a good reason in production, maybe, maybe not. To be fair, I think we didn't need to cache it at all because it's calling a find, which is, you know, should be pretty quick and doesn't need to be cached. But who knows? It's hard to tell. It was really old code. And I think we were feeling also a little nervous to adjust something that we weren't sure what the impact would be. JOËL: I'm always really skeptical of caching. Caching has its place. But I think a lot of developers are a little too happy to introduce one, especially doing it preemptively that, oh well, we might need a cache here, so why not? Let's add that. Or even sometimes, just as a blind solution to any kind of slowness, oh, the site is slow; let's throw a cache here and hope for the best. And the, like, bedrock, like, rule zero of any kind of performance tuning is you've got to measure before and after and make sure that the change that you introduce actually makes things better. And then, also, is it better enough speed-wise that you're willing to pay any kind of costs associated to maintaining the code now that it's more complex? And a lot of caches can have some higher carrying costs. STEPHANIE: Yeah, that's a great point. This debugging mystery an example of one of them. JOËL: How long did it take you to figure out the solution here? STEPHANIE: So, like you, I actually was on a bit of the incorrect path for a little while. And it was only because this issue affected a different flaky test that someone else was investigating that they were able to connect the dots and be like, I think these, you know, two issues are related. And they were the ones who ultimately were able to point us out to the offending test if you will. So, you know, it took me a few days. And I imagine it took the other developer a few days. So, our combined effort was, like, over a week. JOËL: Yep. So, for all our listeners out there, you just heard that Stephanie and I [laughs] both went on multi-day debugging journeys. That happens to everyone. Just because we've been doing this job for years doesn't mean that every bug is, like, a thing that we figure out immediately. So, separately from this bug that I've been working on, a big issue that's been front of mind for me on this project has been the classic build versus buy decision. Because we're integrating with a third-party system, we have to look at either building our own integration or trying to use some off-the-shelf components. And there's a few different levels of this. There are some parts where you can actually, like, literally buy an integration and think through some of the decisions there. And then there's some situations where maybe there's an open-source component that we can use. And there's always trade-offs with both the commercial and the open-source situation. And we have to decide, are we willing to use this, or do we want to build our own? And those have been some really interesting discussions to have. STEPHANIE: Yeah. I think you actually expanded this decision-making problem into a build versus buy versus open source because they are kind of, you know, really different solutions with different outcomes in terms of, you know, maintenance and dependencies, right? And that all have, like, a little bit of a different way to engage with them. JOËL: Interesting. I think I tend to think of the buy category, including both like commercial off-the-shelf software and also open-source off-the-shelf software, things that we wouldn't build custom for ourselves but that are third-party components that we can pull in. STEPHANIE: Yeah, that's interesting because I had a bit of a different mental model because, in my head, when you're buying a commercial solution, you, you know, are maybe losing out on some opportunities for customization or even, like, forking it on your own. So, with an open-source solution, there could be an aspect of making it work for you. Whereas for a commercial solution, you really become dependent on that other company and whether they are willing to cater [laughs] to your needs or not. JOËL: That's fair. For something that's closed-source where you don't actually have access to the code, say it's more of a software as a service situation, then, yeah, you're kind of locked in and hoping that they can provide the needs that you have. On the flip side, you are generally paying for some level of support. The quality of that varies sometimes from one vendor to another. But if something goes wrong, usually, there's someone you can email, someone you can call, and they will tell you how to fix the problem, or they will fix it on their end. STEPHANIE: For the purposes of this conversation, should we talk about the differences, you know, building yourself or leaning on an existing built-out solution for you? JOËL: The project I'm working on is integrating with a Snowflake data warehouse, which is an external place that stores data accessible through something SQL-like. And one of the things that's attractive about this is that you can pull in data from a variety of different sources, transform it, and have it all stored in a kind of standardized structure that you can then integrate with. So, for pulling data in, you can build your own sort of ingestion pipeline, if you want, with code, and their APIs, and things. But there are also third-party vendors that will give you kind of off-the-shelf components that you can use for a lot of popular other data sources that you might want to pull. So, you're saying; I want to pull from this external service. They've probably got a pre-built connector for it. They can also do things like pull from an arbitrary Postgres database on some other server if that's something you have access to. It becomes really attractive because all you need to do is create an account on this website, plug in a few, like, API keys and URLs. And, all of a sudden, data is just flowing from one third-party system into your Snowflake data Warehouse, and it all just kind of works. And you don't have to bother with APIs, or ODBC, or any of that kind of stuff. STEPHANIE: Got it. Yeah, that does sound convenient. As you were talking about this, I was thinking about how if I were in the position of trying to decide how to make that integration happen, the idea of building it would seem kind of scary, especially if it's something that I don't have a lot of expertise in. JOËL: Yeah, so this was really interesting. In the beginning of the project, I looked into a little bit of what goes into building these, and it's fairly simple in terms of the architecture. You just need something that writes data files to typically something like an S3 bucket. And then you can point Snowflake to periodically pull from that bucket, and you write an import script to, you know, parse the columns and write them to the right tables in the structure that you want inside Snowflake. Where things get tricky is the actual integration on the other end. So, you have some sort of third-party service. And now, how do you sort of, on a timer maybe, pull data from that? And if there are data changes that you're synchronizing, is it just all append-only data? Or are you allowing the third-party service to say, "Hey, I deleted this record, and you should reflect that in Snowflake?" Or maybe dealing with an update. So, all of these things you have to think about, as well as synchronization. What you end up having to do is you probably boot up some kind of small service and, you know, maybe this is a small Ruby app that you have on Heroku, maybe this is, like, an AWS Lambda kind of thing. And you probably end up running this every so many seconds or so many minutes, do some work, potentially write some files to S3. And there's a lot of edge cases you have to think about to do it properly. And so, not having to think about all of those edge cases becomes really enticing when you're looking to potentially pay a third party to do this for you. STEPHANIE: Yeah, when you used the words new service, I bristled a little bit [laughs] because I've definitely seen this happen maybe on a bit of a bigger scale for a tool or solution for some need, right? Where some team is formed, or maybe we kind of add some more responsibilities to an existing team to spin up a new service with a new repo with its own pipeline, and it becomes yet another thing to maintain. And I have definitely seen issues with the longevity of that kind of approach. JOËL: The idea of maintaining a fleet of little services for each of our integrations seemed very unappealing to me, especially given that setting something like this up using the commercial approach probably takes 30 minutes per third-party service. There's no way I'm standing up an app and doing this whole querying every so many minutes, and getting data, and transforming it, and writing it to S3, and addressing all the edge cases in 30 minutes. And it's building something that's robust. And, you know, maybe if I want to go, like, really low tech, there's something fun I could do with, like, a Zapier hook and just, like, duct tape a few services together and make this, like, a no-code solution. I still don't know that it would have the robustness of the vendor. And I don't think that I could do it in the same amount of time. STEPHANIE: Yeah. I like the keyword robustness here because, at first, you were saying, like, you know, this looked relatively small in scope, right? The code that you had to write. But introducing all of the variables of things that could go wrong [laughs] beyond the custom part that you actually care about seemed quite cumbersome. JOËL: I think there's also, at this point, a lot of really interesting prioritization questions. There are money questions, but there are also time questions you have to think about. So, how much dev time do we want to devote upfront to building out these integrations? And if you're trying to move fast and get a proof of concept out, or even get, like, an MVP out in front of customers, it might be worth paying more money upfront to a third-party vendor because it allows you to ship something this week rather than next month. STEPHANIE: Yeah. The "How soon do you need it?" is a very good question to ask. Another one that I have learned to include in my arsenal of, you know, evaluating this kind of stuff comes from a thoughtbot blog by Josh Clayton, where he, you know, talks about the build versus buy problem. And his takeaway is that you should buy when your business is not dependent on it. JOËL: When it's not part of, like, the core, like, value-add that your business is doing. Why spend developer time on something that's not, like, the core thing that your product is when you can pay someone else to do it for you? And like we said earlier, a lot of that time ends up being sunk into edge cases and robustness and things like that to the point where now you have to build an expertise in a, like, secondary thing that your business doesn't really care about. STEPHANIE: Yeah, absolutely. I think this is also perhaps where very clear business goals or a vision would come in handy as well. Because if you're considering building something that doesn't quite support that vision, then it will likely end up continuing to be deprioritized over the long term until it becomes this thing that no one is accountable for maintaining and caring for. And just causes a lot of, honestly, morale issues is what I've seen when some service that was spun up to try to solve a particular problem is kind of on its last legs and has been really neglected, and no one wants to work on it. But it ends up causing issues for the rest of the development team. But then they're also really focused on initiatives that actually do provide the business value. That is a really hard balancing act that I've seen teams struggle with. JOËL: Earlier this year, we were talking about the book Sustainable Rails. And it really hammers home the idea of a carrying cost for the code, and I think that's exactly what we're talking about here. And that carrying cost can be time and money. But I like that you also mentioned the morale effects. You know, that's a carrying cost that just sort of depresses the productivity of your team when morale is low. STEPHANIE: Yeah, absolutely. I'm curious if we could discuss some of the carrying costs of buying a solution and where you've seen that become tricky. JOËL: The first thing to look at is the literal cost, the money aspect of things. And I think it's a really interesting situation for the business models for these types of Snowflake connectors because they typically charge by the amount of data that you're transmitting, so per row of data that you're transmitting. And so, that cost will fluctuate depending on whether the third-party service you're integrating with is, like, really chatty or not. When you contrast that to building, building typically has a relatively fixed cost. It's a big upfront cost, and then there's some maintenance cost to go with it. So, if I'm building some kind of integration for, let's say, Shopify, then there's the cost I need to build up front to integrate that. And if that takes me, I don't know, a week or two weeks, or however long it is, you know, that's a pretty big chunk of time. And my time is money. And so, you can actually do the math and say, "Well, if we know that we're getting so many rows per day at this rate from the commercial vendor, how many weeks do we have to pay for the commercial one before we break even and it becomes more expensive than building it upfront, just in terms of my time?" And sometimes you do that math, and you're like, wow, you know, we could be going on this commercial thing for, like, two years before we break even. In that case, from a purely financial point of view, it's probably worth paying for that connector. And so, now it becomes really interesting. You say, okay, well, which are the connectors that we have that are low volume, and which are the ones that are high volume? Because each of them is going to have a different break-even point. The ones that you break even after, you know, three or four weeks might be the ones that become more interesting to have a conversation about building. Whereas some of the others, it's clearly not worth our time to build it ourselves. STEPHANIE: The way you described this problem was really interesting to me because it almost sounds like you found the solution somewhere in the middle, potentially, where, you know, you may try building the ones that are highest priority, and you end up learning a lot from that experience, right? That could make it easier or at least, like, set you up to consider doing that moving forward in the future if you find, like, that is what is valuable. But it's interesting to me that you kind of have the best of both worlds of, like, getting the commercial solutions now for the things that are lower value and then doing what you can to get the most out of building a solution. JOËL: Yeah. So, my final recommendation ended up being, let's go all commercial for now. And then, once we've built out something, and because speed is also an issue here, once we've built out something and it's out with customers, and we're starting to see value from this, then we can start looking at how much are we paying per week for each of these connectors? And is it worth maybe going back and building our own for some of these higher-volume connectors? But starting with the commercial one for everything. STEPHANIE: Yeah, I actually think that's generally a pretty good path forward because then you are also learning about how you use the commercial solution and, you know, which features of it are critical so that if you do eventually find yourselves, like, maybe considering a shift to building in-house, like, you could start with a more clear MVP, right? Because you know how your team is using an existing product and can focus on the parts that your business are dependent on. JOËL: Yeah, it's that classic iterative development style. I think here it's also kind of inspired by a strategy I typically use for performance, which is make it work before you try to make it fast. And, actually, make it work, then profile, then measure, find the hotspots, and then focus on making those things fast. So, in this case, instead of speed, we're talking about money. So, it's make it work, then profile, find the parts that are expensive, and make the trade-off of, like, okay, is it worth investing into making that part less expensive in terms of resources? STEPHANIE: I like that as a framework a lot. JOËL: A lot of what we do as programmers is optimization, right? And sometimes, we're optimizing for execution time. Sometimes we're optimizing for memory cost, and sometimes we're optimizing for dollars. STEPHANIE: Yeah, that's really interesting because, with the buy solution, you know very clearly, like, how much the thing will cost. Whereas I've definitely seen teams go down the building route, and it always takes longer than expected [laughs], and that is money, right? In terms of the developer's time, for sure. JOËL: Yeah, definitely, like, add some kind of multiplier when you're budgeting out that build alternative because, quite likely, there are some edge cases that you haven't thought about that the commercial partner has, and you will have to spend more time on that than you expected. STEPHANIE: Yeah, in addition to whatever opportunity cost of not working on something that is driving revenue for the business right now. JOËL: Exactly. STEPHANIE: So, the direction of this conversation ended up going kind of towards, like, what is best for the team at, like, a product and company level. But I think that we make these decisions a lot more frequently, even when it comes to whether we pull in a gem or, you know, use an open-source tool or not. And I would be really interested in discussing more of that in another episode. JOËL: Yeah. That gets into some controversial takes, right? It's the evergreen topic of: do we build it ourselves, or do we pull in some kind of third-party package? STEPHANIE: Something for the future to look forward to. On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeee!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Stephanie had a small consulting win: saying no to a client. GeoGuessr is all the rage for thoughtbot's remote working culture, which leads to today's topic of forming human connections in a virtual (work) environment. GeoGuessr (https://www.geoguessr.com/) Strategies for saying no by Elle Meredith (https://www.youtube.com/watch?v=_2zWwwjnuUA) NYT Let's Ignore Each Other in the Same Room (https://www.nytimes.com/2021/09/24/well/live/parallel-play-for-adults.html) Random question generator (https://standup-questions.vercel.app/) Transcript: JOËL: And this is just where it ends. [laughter] Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: So, I have a small consulting win, or even just a small, like, win as a human being [laughs] that I want to share, which is that I feel good about a way that I handled saying no to a stakeholder recently. And, you know, I really got to take them where I can get it because that is so challenging for me. But I feel really glad because we ended up kind of coming out the other side of it having a better understanding of each other's goals and needs. And so, basically, what happened was I was working on a task, and our product owner on our team asked me if it could be done by next week. And immediately, I wanted to say, "Absolutely not." [laughs] But, you know, I took a second and, you know, I had the wherewithal to ask why. You know, I was kind of curious, like, where was this deadline coming from? Like, what was on her radar that, like, wasn't on mine? And she had shared that, oh, you know, if we were able to get it out before this big launch, she was thinking that it actually might make our customer support team's lives easier because we were kind of taking away access to something before some new features rolled out. And, you know, there might be some customers who would complain. And with that information, you know, that was really helpful in helping me understand. And I'm like, yeah, like, that seems like a helpful thing to know, so I could try to strive for it. Because I also, like, want to make that process go easier as well. But I told her that I'd let her know because I honestly wasn't sure if it was possible to do by next week. And after a little bit of, you know, more digging, kind of seeing how my progress was going, in the end, I had to say that I didn't feel confident that we could finish it in time for that deadline because of the other risks, right? Like, I didn't want to just release this thing without feeling good about the plan that we had. And so, that was my small, little win in saying no, and I feel very proud of myself for it. JOËL: I'm proud of you too. That's not easy to just do in the first place, and then to do it well is a whole other level. It sounds, though, that you came out of the other side with the client with almost, like, a better relationship. STEPHANIE: Yeah, I think so. In general, you know, I really struggle when people do end up getting into that debate of, like, "Well, I need this." And someone else says, "Well, I need this other thing." And, you know, at some point, it kind of gets a bit unproductive, right? But I think this was a very helpful way for me to see a path forward when maybe we, like, have different priorities. But, like, can we better understand each other and the impact of them to ultimately, like, make the best decision? The other thing that I wanted to share that I learned recently was there was a recent RailsConf talk by Elle Meredith, and it was about strategies to say no, and I watched it. And one really cool thing that I learned was that the word priority, you know, when it was first created, it actually didn't really have, like, a plural form. There was really only ever, like, a singular priority. And it wasn't until, I think, you know, the recent century or something like that, that people started to use it in a plural form. And that was really enlightening to me. I think it made me rethink the word and how I use it, and it made a lot of sense, too. Because at any given moment, you know, really, you can't be doing more than one thing; I mean, you can try. I know that I have been guilty of multitasking. But that, you know, doesn't always serve me. I never end up doing all of the things that I'm trying to do well. And I would be really curious to kind of, you know, when I do feel that urge, like, think a little bit about, like, what is the one thing that I should be doing right now that is the highest priority? JOËL: I would definitely second that recommendation for this talk. I actually got to see it live at RailsConf, and it was excellent. STEPHANIE: So, Joël, what's new in your world? JOËL: I got to participate in a really fun event at thoughtbot today. We got together with some other people on the Boost Team and played a few rounds of GeoGuessr. And for those who are not familiar with this game, it drops you randomly somewhere in the world in Google Street View. You can move around. And there's a timer, and you have to drop a pin on a map where you think you are. So, you're walking through the streets, and you're like, okay, well, I don't know this language. I'm not sure where we're going. You know, with the vibes going here, I'll bet, you know, this looks like maybe southern China, and then you drop a pin. And oh no, turns out it was actually Singapore. And there's all these little hints and things. People who are really into it have learned all these tricks, and they can be really good. Sara Jackson, who is our resident GeoGuessr expert, is excellent at this. But it was a good time. STEPHANIE: Yeah, it was really fun. I liked that we played a cooperative mode where we were all kind of helping each other out. And so, maybe someone is, like, exploring on the map and sees a street sign and is like, "Oh, like, that looks like this language." And someone else is like, "Oh yeah, like, that is that." Or like, "No, I think it's actually this other language," and sharing all of the different, like, pieces of information that we're finding to get closer and closer to what it might be. And then we celebrate whoever ends up getting the closest because, at some point, it's kind of just, like, just a luck of the pin, right? Where maybe you happen to click on, like, the right place. But it's always really exciting when we're like, wow, like, Sara was only 500 kilometers away in finding the exact place that we were served. So, I had a good time as well. JOËL: So, speaking of cooperative events, this was a work event that we did. We just got together and played a game. And, for me, that was a really fun way to connect with some of my colleagues. I'm curious, what are your thoughts on things that you've seen done well in companies that are remote-first that really foster a sense of connection and community among a team? STEPHANIE: I think this worked especially well today because it was kind of scheduled in regular time that we have as a team to me. And sometimes, you know, the meeting topics are a bit more work-focused. But what I really like is that anyone on the team can host one of these meetings. We have them biweekly, and we just call them Boost biweeklies. Boost is the team that Joël and I are on. JOËL: Naming is the hardest problem in computer science. STEPHANIE: It really is. But I really like that people can bring, you know, a little bit of their own flavor to this meeting. So, whoever is host just kind of comes up with something to do. And sometimes it's like show and tell. You know, other times it is more of like, you know, what's the update on some of the projects that we're doing? Other times, it's the Spicy Takes Lightning Talks that we've kind of mentioned on the podcast before. And yeah, it is just a really nice, like, time for us to get together. And I also feel like I learn something about my co-workers every time that we meet, whether it's the person who is hosting the meeting and kind of where their interests are. I think someone even did, like, chair yoga once and guided the team in doing that. Or because they are more casual, right? Sometimes we just play a game, and I really enjoy that nice break in my day. JOËL: Do you find that the particular style of these meetings makes you feel more connected to your colleagues? Would you prefer just kind of game day one, like we had today, versus maybe, like, lightning talks or a presentation on security or something like that? STEPHANIE: I actually think the diversity is what makes it special. I get to see, you know, a bunch of different sides of my co-workers and, you know, some days, the topic is a little more serious, and that can be really connecting. Another Boost Team member had hosted a biweekly where we kind of shared the challenges of, like, consulting work and, like, onboarding onto a new project and sharing what might be difficult and, like, how we might be feeling when we do join a new project. And I think that was really helpful because it was very validating for something that I thought, like, maybe I felt a little bit more alone in. And the tone was a little bit more, like, earnest and serious. But I came away with it feeling very supported by my team, right? And other times, it is just silliness and fun [laughs], which, you know, is also important. Like, we need to have fun every once in a while. JOËL: That's awesome. Do you feel like when you go to these meetings, you're looking more for knowledge or looking more for connection? STEPHANIE: I think both because knowledge sharing is also, you know, can be really helpful. Like, I have enjoyed learning that, you know, so and so is, like, a GeoGuessr expert, Sara, right? And so, if I ever, like, find myself needing [chuckles] someone to go to about my Google Street View or world geography questions, I know that I can go to her. And, like, knowing that about her, like, makes me feel more connected to her. So, I think both are true. So, we have been talking about a meeting style form of connecting in a remote workplace, but I'm really curious about your thoughts on asynchronous versus synchronous communication and how you find connection with a format that is more asynchronous, not just, you know, being in a meeting together. JOËL: That's really challenging. I think I personally find that something that's mostly synchronous with maybe a little bit of a lag works pretty well for me, so something like Slack, where it's not exactly real-time because someone could take some time to come back to me. But for working hours overlap, there's likely some close-to-synchronous conversation happening. But, you know, I can still get up and, you know, refill my cup of coffee, or it's not quite like I'm sitting in front of a camera. So, I think that, for many things, hits the sweet spot for myself. But there's definitely some things where I think you want a higher, like, information density. And that's, I think, where the synchronous face-to-face meeting really shines. STEPHANIE: Information density. I haven't heard that phrase before, but I like it. JOËL: The idea being, you know, how much information or how many words are you sharing back and forth, you know, per minute or something like that. And when you're talking on a call, you can do a lot more of that than you can going back and forth over Slack or writing an email. STEPHANIE: So, I would say that at thoughtbot, we have a pretty asynchronous Slack culture, which I think can be quite different from other, you know, places I've worked at before or other Slack spaces that I've seen. And I actually find it a little bit harder to engage in that way. We have a dev channel where, you know, people chat about different technical topics. And sometimes, you know, those threads go, like, 40 replies long. And I think you tend to engage a lot more in those. And I'm curious, like, does that scratch the itch for you in terms of that perfect, like, async, kind of some amount of lag for you to be doing other things, kind of doing your work, but then being able to come back and pick up the conversation where I left off? JOËL: Yes, that is really nice because, you know, maybe I have a meeting or something, and I'm not there when the conversation starts, but I don't miss out. And I get to join in, you know, maybe 30 minutes after everyone else. You know, sometimes you don't want to just, like, restart a conversation that's happened and is done. But some of these things will kind of be going on and off all day. And those can be really fun, especially sometimes, like, a new person joins the thread and brings in a totally new perspective or a new angle that kind of, like, breathes new life into it and kind of gives everyone a new perspective. STEPHANIE: Nice. I also think there's something to the idea of seeing more people engage with something that then invites other people to engage with it. JOËL: I would agree with that. It's definitely exciting to see a thread, and it's not like, oh, it's empty, and I'm the only one who's put a response in here. When there is a lot of back and forth, you can almost feel the excitement. And that gets me hyped to, like, keep it going. STEPHANIE: At a previous workplace in our Slack, we had a, like, virtual Jeopardy channel. JOËL: Ooh. STEPHANIE: And so, there was a little Jeopardy bot. And I guess whenever someone, you know, had a low on what they were doing, they would just start, you know, tagging the bot to pose a question. And anyone can answer, right? But once you kind of got the ball rolling, you would see other people start playing as well. And it would get really active for segments of 30 minutes or so. And I always really enjoyed that because, yeah, it was a way for me to remember like, oh yeah, there's, like, other people also, like, typing away on their little keyboards, and we're all here together. But it was really interesting to see, like, when someone got it rolling, like, oh, other people, like, joined in. JOËL: Yeah, being able to see small things like that can really build a sense of connection, even if you're not yourself directly participating. STEPHANIE: Yeah. I think another thing I've been trying out lately is letting people know that I'm in a meeting space and offering to virtually co-work. So, you know, during the early days of when thoughtbot went remote, we had a lounge virtual meeting space for people to hang out with and, you know, get that face time that they weren't getting anymore since we weren't in the office. And, you know, I think that has kind of decreased in terms of engagement over, you know, several years now. And obviously, people have a lot of meeting fatigue and stuff like that. But I was kind of in a mood to revive it a little bit because, yeah, I kind of got over the meeting fatigue and was wanting more face time with people. And the unfortunate thing, though, is that, like, no one was showing up to this room anymore. So, you know, even if someone wanted to hang out in it, you know, they go in. They see no one's there, you know, maybe they stay for a few minutes, but then they're like, okay, well, I'm just going to leave now. And a couple of thoughtboters and I have been trying to revive it where we'll post in our general channel, like, "Hey, like, I'm in this meeting room. Like, come hang out for the next hour if you would like." And that's been working well for me. I have had a few, like, really nice lounge, virtual co-working hangout sessions. Even if one person shows up, honestly, like, that fulfills my want to just, like, speak to another human. [laughs] JOËL: What does virtual co-working look like? Are you just kind of each doing work, but you've got a video camera on, and you're just aware of the presence of someone else? Do you kind of have, like, random breaks where you talk? What is that experience like? STEPHANIE: Oh yeah, that's a good question. I have to say; for me, I'm just talking to the other [laughs] person at that point. I'm not really doing a whole lot of work. And, you know, in some ways, I almost think that, like, in those moments, I am really wanting to chat with someone and, like, that's okay, right? JOËL: It's like a virtual water cooler for you. STEPHANIE: Yeah, exactly. Like, that would be the moment if I were working in office that I would wander into the kitchen looking for a snack but also an unsuspecting victim to start [laughs] a conversation with. JOËL: I feel you. I feel you. I have absolutely done that. STEPHANIE: Yeah. And that's actually what makes me feel a little less guilty about it. Because, you know, when I was working in the office, like, that was such a big part of my day, and it's kind of what kept me motivated. And at home, I do find myself, like, a lot more productive. In fact, like, I think I am because I'm, you know, not spending that time wandering into the kitchen. But at what cost? [laughs] At the cost of, like, me feeling very, like, lonely and, like, kind of burnt out at the end of the day. So, injecting my day with some of these moments, I think, is important to me. And also, again, like, I know that I'm being really productive in my, like, heads-down-time that I want to, you know, allow myself to just like, get that dose of connection. JOËL: I know, for me, when we were doing things like this in person as well, those conversations that happen, yes, there's some random, frivolous stuff, but sometimes, it is a conversation related to work that I'm doing. Because, you know, someone who's not on my project is like, "Hey, how's your project going?" Or whatever. I'm like, "Oh, well, I'm, you know, doing this ODBC connection, and I'm kind of stuck." And, you know, we kind of talk about a few things. It's like, "Oh, did you know about this gem?" And it's like, "Wait, why didn't I talk to you earlier? Because this totally solves my problem." STEPHANIE: Yeah, I think that being a sounding board is so valuable as well. So, I guess I enjoy virtual co-working, not necessarily, you know, us, like, sitting together and doing our work separately. Though I know that there's value in that, especially in real life. Like, I remember reading an article. I'll try to find it and link it. But the idea of just, like, sharing space with someone can be, like, a form of bonding. But I do really enjoy just hearing about what other people are working on and just kind of, like, asking questions about it, right? And maybe we do take away, like, a new perspective or, like, have some insights about, like, the work itself. And, yeah, we don't really get that when we're working remotely by ourselves because there's no one to turn to and be like, "Hey, what do you think about this problem?" JOËL: I love how no matter what the topic is that we're discussing on this show, you always have a book or an article or something that you've read that you can reference. And I think that's amazing. STEPHANIE: Thank you. JOËL: So, you're talking about things that have really helped you feel a deeper sense of connection. I had a realization recently about the power of physical items. In particular, as consultants, sometimes we work with clients who, for security reasons, want us to work on a dedicated laptop for this particular client. And so, we'll have clients maybe—well, now that we're remote—ship us a laptop, and we work on that laptop when we're doing client stuff, and then on our thoughtbot laptops when we're doing thoughtbot things. And when I've been on clients like that, I have felt much more isolated from the thoughtbot team. And just, like, physically switching over to the thoughtbot laptop, all of a sudden, gives me that feeling of connection. And there's something I can't quite explain about the power of the physical item. And, say, I'm working on the thoughtbot laptop today with, you know, thoughtbot Slack in the background or whatever, and I feel more connected to my colleagues. STEPHANIE: Yeah, that is really curious. Did you also have thoughtbot communication channels open in your client laptop during that time? JOËL: I did, and yet still felt more separation. STEPHANIE: Yeah, that's really interesting. The way you're describing it, it was almost like, you know, the main laptop that you work with, with your, like, all of the settings that you like, all of your little shortcuts, you know, the autocomplete to the whatever, like, channels of communication that you are used to seeing. In some ways, that almost feels like home a little bit. And I wonder if working on a client laptop almost kind of feels like, you know, being in a stranger's house, right? JOËL: There's definitely an element of that. Yeah, all the little things I've fine-tuned, some of the productivity software I have on there that are just, you know, I can one by one set them up on the client laptop, depending on permissions. But yeah, it's never quite the same. STEPHANIE: So, when you are in a situation where you're mostly working from a client laptop and maybe embedded in their Slack workspace, embedded in their team, how do you go about investing in connection with your client team? JOËL: So, you know what's kind of weird? Is that when I'm on a client laptop, I feel less connected to my colleagues at thoughtbot, but the reverse is not necessarily true. I don't feel more connected to colleagues on a client team on a client laptop than I would on my thoughtbot laptop. So, I'm not exactly sure what the psychology is going on there. But I feel kind of most connected to both when I'm working on my thoughtbot laptop, which is perhaps a bit strange. STEPHANIE: Oh, yeah, that is interesting. I think, in general, there's an aspect of joining a new client team and trying to figure out the culture there and how you might engage with it, right? And how what you bring to the table kind of fits in with how they do things, and how they talk about things, and how they behave. In some ways, it's kind of, like, you know, an outsider joining this, like, in-group, right? So, I've definitely realized that the ways that I engage and feel connected at thoughtbot, like, may or may not work for the client team that I'm joining. JOËL: Yeah. And onboarding onto a client team is not just a technical exercise, right? It's also a social process where you want to get to know the other people on your team, get to sort of integrate into the way they work, their processes, hopefully, build a little bit of, like, personal connection with individuals because all of those are going to help me do my job better tomorrow, and the day after, and the week after that. STEPHANIE: Yeah. I had mentioned previously that one thing that I've been enjoying on my client team is our daily sync question. So, a random question will be generated, you know, like, "What are you eating for dinner today?" Or, like, "What are you looking forward to this weekend?" And folks are able to share. And the fun thing is that sometimes the answer to the question is longer than their work update itself. JOËL: Nice. STEPHANIE: But that is actually the, you know, the beauty of it because we all just, like, get to laugh and get to, you know, chime in. And I'm like, "Oh yeah, like, that sounds delicious, like, what you're eating for dinner tonight." But, like, that would not work for our Boost Team's sync because, you know, it's a much bigger meeting with sometimes up to, you know, 20 to almost 30 people and, like, we can't quite have as much time spent talking about the fun question of the day. So, I definitely think that, you know, it depends your team size, and makeup, and whatnot. JOËL: Are those questions kind of preset, or do you all get to contribute questions to the list? STEPHANIE: We brainstormed the questions one retro when we were realizing that we were kind of getting a little bored of the existing question that we had. And we came up with a handful that is plugged into, like, a website, or, like, an app that randomly, you know, picks the question of the day. And so, I think, again, when we get a little bored of the ones that we have in rotation, we'll throw in some curveballs in there. JOËL: Have you ever considered adding "What's new in your world?" to this rotation? STEPHANIE: It's funny you mentioned that because it's actually the question that we got a little bit stale on. [laughs] JOËL: Really? STEPHANIE: And we needed to inject some new life into, yeah. It's a classic, you know. But I think the variety is nice, especially since we're meeting almost every day. And before we started recording, you and I were just talking about how even sometimes it's tough to think of something that's new in our world [laughs] because we don't always live the most interesting and, you know, new lives. And sometimes, we kind of just have to dig deep to come up with something, and we only meet weekly. [laughs] JOËL: I can definitely see how doing this daily might be more challenging. I think there's also value in questions that are a little bit more focused. Part of what's fun for this podcast is that "What's new in your world?" is so kind of broad. But maybe for something daily, having something really specific, like, what did you eat for dinner tonight? Means that you aren't just kind of drawing blanks in your mind, like, uh, uh, what is new in my world? What have I done? I don't know; I have a boring life. I don't do anything. Kind of panic mode that you can sometimes get when you hit a meeting. And so, I do know that when I've been sometimes in situations with people where you have questions like that, I've tended to really appreciate the more targeted ones. STEPHANIE: Yeah, that's so interesting you mentioned that because I think in social situations, there's usually maybe, like, someone who is really good at asking those, like, specific questions to get the group talking and, like, you know, engaged in a fun conversation, and that specificity helps. One thing that I was just wondering about is the value of meeting every day in a sync kind of format, and I'm curious if you think that is important to you. If you have been on other teams that don't meet every day, maybe they have, like, a virtual check-in, right? Like, a virtual reminder to share what they're working on as opposed to meeting synchronously. JOËL: I think I've seen sort of different purposes for sync meetings. Sometimes it's very kind of project-heavy, right? You're talking about the tickets you're working on for today. The reason you're having that is specifically for status updates or because you are blocked, and you want somebody else to help unblock you. So, it's very process-focused. I think that varies team to team, but it can be really helpful. Even I've been on projects where it's maybe me and one other person, and we'll have kind of an informal just call each other up every morning and say, "Hey, here's what I'm working on today. Here's kind of roughly the strategy I plan to take on it. And we'll go back and forth." And for something like that, it inevitably also somewhat turns into a bit of a social call, so that's planning and social. And I think that can be really strong. STEPHANIE: Yeah, I like that a lot. JOËL: That's not necessarily going to be the case for every team, every project, especially with larger teams. And I feel like for something like the Boost Team at thoughtbot, we have a daily sync. We're not all working on the same project. So, I don't want to know about the specific details of the ticket you're working on. I'm more interested in getting just a little bit of face time with the whole of our team to feel a connection. And, you know, maybe if you've got something cool that you want to share, and that can be a win. It can even be a struggle. And we can all kind of empathize, right? That, like, "Oh, I dropped production database this morning, and I'm kind of freaking out," is a totally fine thing to share. But "I am working on ticket 1, 2, 3, 4 to add some text to a part of the page," that's not particularly useful to me in the kind of sync that we have for the thoughtbot Boost Team. STEPHANIE: Yeah, absolutely. I think knowing, like, who the audience is of the meeting and, like, how they might be able to support you or be there for you is helpful in making them feel a little more relevant and personal. And I had mentioned that our Boost daily meetings or daily syncs, you know, are a little too big for people to really get into, you know, sharing a fun, personal anecdote, or whatever. But one thing that I really enjoy is that whoever goes last in giving their update gets to choose the sign-off for everyone. So maybe that's like, okay, we'll just go out on a wave, and we all wave. Or maybe it's, you know, like, making a little heart with your hands. And then there's some folks on the team who go really wild and, you know, come up with something totally unexpected. And I think, you know, that spontaneity is so fun. And we all share it in this collective act of...I'm trying to think of a funny one lately, maybe, like, sinking down into your chair until you disappear from the view [laughs]. That's a good one. JOËL: Sometimes it's those, like, small social rituals that can be really meaningful. STEPHANIE: Absolutely. Do you have a favorite sign-off that you have either requested or have done? JOËL: So, I typically just go for the wave if I'm last because I've not thought about it. But I generally think it's fun to have everybody try to mimic an emoji. So, it might be like, oh, everybody do the, you know, See-No-Evil emoji, or everybody do the party parrot. Those are pretty fun to sign off on. STEPHANIE: Oh yeah, [inaudible 29:15] pausing is good. I think another one I like is, "Everyone do your best impression of a tree." [laughs] JOËL: Sometimes, too, it's fun to do something that's relevant to the particular day. If there's something special happening that day, you get something relevant. I've done before, if it's on a Friday, say, "Everybody do your best Rebecca Black impression." STEPHANIE: Yeah, also excellent. JOËL: Because, you know, it's Friday. STEPHANIE: Yeah, like, a little moment of collective celebration for the weekend. On that note, it's a Friday we're recording this episode. Shall we wrap up and look forward to the weekend? JOËL: [laughter] Fun, fun, fun, fun. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël has a fascinating discovery! He learned a new nuance around working with dependency graphs. Stephanie just finished playing a 100-hour video game on Nintendo Switch: a Japanese role-playing game called Octopath Traveler II. On the work front, she is struggling with a lot of churn in acceptance criteria and ideas about how features should work. How do these get documented? What happens when they change? What happens when people lose this context over time? Strangler Fig Pattern (https://shopify.engineering/refactoring-legacy-code-strangler-fig-pattern) Octopath Traveler 2 (https://octopathtraveler2.square-enix-games.com/en-us/) Empowering other departments (https://www.bikeshed.fm/388) Transcript: JOËL: You're the one who controls the pacing here. STEPHANIE: Oh, I am. Okay, great. Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: So long-time Bike Shed listeners will know that I'm a huge fan of dependency graphs for modeling all sorts of problems and particularly when trying to figure out how to work in an iterative fashion where you can do a bunch of small chunks of work that are independent, that can be shipped one at a time without having your software be in a breaking state in all of these intermediate steps. And I recently made a really exciting discovery, or I learned a new nuance around working with dependency graphs. So the idea is that if you have a series of entities that have dependencies on each other, so maybe you're trying to build, let's say, some kind of object model or maybe a series of database tables that will reference each other, that kind of thing, if you draw a dependency graph where each bubble on your graph points to other bubbles that it depends on, that means that it can't be created without those other things already existing. Then, in order to create all of those entities for the first time, let's say they're database tables, you need to work your way from kind of the outside in. You start with any bubbles on your graph that have no arrows going out from them. That means they have no dependencies. They can be safely built on their own, and then you kind of work your way backwards up the arrows. And that's how I've sort of thought about working with dependency graphs for a long time. Recently, I've been doing some work that involves deleting entities in such a graph. So, again, let's say we're talking about database tables. What I came to realize is that deleting works in the opposite order. So, if you have a table that have other tables that depend on it, but it doesn't depend on anything, that's the first one you want to create. But it's also the last one you want to delete. So, when you're deleting, you want to start with the table that maybe has dependencies on other tables, but no other tables depend on it. It is going to be kind of like the root node of your dependency graph. So I guess the short guideline here is when you're creating, work from the bottom up or work from the leaves inward, and when you're deleting, work from the top-down or work from the root outward or roots because a graph can have multiple roots; it's not a tree. STEPHANIE: That is interesting. I'm wondering, did you have a mental model for managing deleting of dependencies prior? JOËL: No. I've always worked with creating new things. And I went into this task thinking that deleting would be just like creating and then was like, wait a minute, that doesn't work. And then, you know, a few cycles later, realized, oh, wait, deleting is the opposite of creating when you're navigating the graph. And, all of a sudden, I feel like I've got a much clearer mental model or just another way of thinking about how to work with something like this. STEPHANIE: Cool. That actually got me thinking about a case where you might have a circular dependency. Is that something you've considered yet? JOËL: Yes. So, when you have a dependency graph, and you've got a circular dependency, that's a big problem because...so, in the creating model, there is no leaf node, if you will, because they both reference each other. So that means that each of these entities cannot be created on its own, the entire cycle. And maybe you've got only two, but maybe your cycle is, you know, ten entities big. The entire cycle is going to be shipped as one massive change. So something that I often try to do is if I draw a dependency graph out and notice, wait a minute, I do have cyclical dependencies, the question then becomes, can I break that cycle to allow myself to work iteratively? Because otherwise, I know that there's a big chunk that can't be done iteratively. It just has to be done all at once. STEPHANIE: Yeah, that's really interesting because I've certainly been in that situation where I don't realize until it's too late, where I've started going down the path thinking that, you know, I could just remove this one thing, or make this one change, and then find myself suddenly, you know, coming to the realization, oh, this other thing is now going to have to change. And then, at that point, there's almost kind of like the sunken cost fallacy [laughs] a little bit where you're like, well, I'm already in it. So, why don't I keep going? But your strategy of trying to find a way to break that cyclica...that is two words combined. [laughs] I meant to say circular dependency [laughs] is the right way to avoid just having to do it all in one go. Have you had to break up a cycle like that before? JOËL: Yes. I do it on a semi-frequent basis. The fancy term here for what I'm looking for when I'm building out a dependency graph is a directed acyclic graph. That's a graph theory or a computer science term that you'll hear thrown around a lot, DAG. I often like to...when building out a series of tasks that might also form a graph because you don't just model entities in your system; you might model a series of tasks as a graph. If there's a cycle in the graph, typically, I can break that using something like the strangler fig pattern, which is a way to kind of have some intermediate steps that are non-breaking that then lead you to the refactor that you want. And I've used the strangler fig pattern for a long time, never realizing until later that, oh, what I'm actually doing is breaking cycles in my task dependency graph. STEPHANIE: Hmm. I'm curious if you have noticed how these cycles come to be because I almost imagine that they get introduced over time, where you maybe did start with a parent and then you, you know, had dependencies. But then, over time, somehow, that circular dependency gets introduced. And I'm wondering if part of figuring out how to break that cycle is determining how things were introduced, like, over time. JOËL: In my experience, this happens in a lot of different ways because I'm using dependency graphs like this to give myself a mental model for a lot of different kinds of things. So maybe I'm thinking in terms of database tables. And so those might get a circular dependency that gets added over time as the system grows. But I'm also using it sometimes to model maybe a series of tasks. So I take a large task, and I break it down into subtasks that are all connected to each other. And that doesn't tend to sort of evolve over time in the same way that a series of database tables do. So I think it's very context-dependent. But there are definitely situations where it will be like you said, something that kind of evolves over time. STEPHANIE: That makes sense. Well, I'm excited for you to get to deleting some potential code or database tables that are no longer in use. That sounds like a developer's dream [laughs] to clean up all that stuff. JOËL: It's interesting because it's...a move operation is effectively what's happening. So I'm recreating tables in another system, pointing the ActiveRecord to this new system, and then deleting the existing ones in the local database. So, in a sense, I'm kind of traveling up this dependency graph from the leaf nodes into the root and then back down from the root to the leaves as I'm creating and then deleting everything or creating in one system, and then going back and deleting in the other system. STEPHANIE: Got it. Okay, so not necessarily a net negative but, like you said, a move or just having to gradually replace to use a new system. JOËL: That's right. And we're trying not to do this as, you know, okay, we're going to take the system down and move 50 tables from one system to another. But instead, saying, like, you know, one at a time, we're going to move these things over. And it's going to be small, incremental change over the course of a couple of weeks. And they're all pretty safe to deploy, and we feel good about them. STEPHANIE: That's good. I'm glad you feel good. [laughs] We should all be able to feel good when we make changes like that. JOËL: It's going to make my Fridays just so much more low-key just, like, yeah, hit that deploy button. It's okay. So, Stephanie, what is new in your world? STEPHANIE: So this is not work-related at all. But I just finished playing a 100-hour video game on my Nintendo Switch. [laughs] I finished a Japanese role-playing game called Octopath Traveler II. And I have never really played a game like this before. I've not, you know, put in many, many hours into something that then had an end, like, a completion. So, at the end of this very long game that had a very, you know, compelling and engaging story and I was invested in all of these characters, and by the time the credits were rolling, I felt a little sad to be leaving this world that I have been in many evenings over the last couple of months. Yeah, I don't know, I'm feeling both a little sad because, you know like I said, I got really invested in this game, but now I'm also kind of glad to have some free time back in [laughs] my life because that has definitely been the primary, like, evening activity that I've been doing to relax. JOËL: It sounds like this game had a very, like, a particularly immersive world that really pulled you in. STEPHANIE: It did. It did. It has these eight, like, different characters that you follow, like, different chapters and all of their stories, and then they all kind of come together as well. And the world was huge in this game. There were so many little towns to explore. And I didn't realize I was a completionist type. But I found myself running around opening every chest, talking to every NPC, and making sure that I, you know, collected all of my items [chuckles] before moving on. I also finished all of the side quests, which is, I think, you know, how I managed to put in over 100 hours into it. But yeah, it was very immersive, and I really enjoyed it. I don't know if this will become a norm for me. I know there are some people who are, you know, JRPG diehards and play a lot of these kinds of games, but they're a real, like, time investment for sure. JOËL: Are there achievements for completing everything? STEPHANIE: Not that I can tell on the Switch. I do know that, like, on other systems, you can see your progress on having done all of the things there are to do. But I think it's actually kind of better for me to just play [laughs] to just, like, think that I've done it all but not really, like, have something that tells me whether or not I've done it because then I would feel a lot more neurotic, I think, about being able to let it go where I am now. [laughs] JOËL: Right. If we've got, like, an explicit checklist of things or a progress bar, then it feels like you got to get to all the things. STEPHANIE: Yeah, exactly. I think there are still, you know, a couple more things that I wrote down on my little checklist of tasks that I would want to do once I feel like I want to come back to the game. But for now, like I said, I watched the credits roll. I teared up a little bit, you know, thinking about and reminiscing on my adventure with these characters, and I'm ready to put it down for a bit. JOËL: Did I hear correctly that you made a checklist for this game of things you wanted to do? STEPHANIE: Yes, [laughs] I did. JOËL: That's amazing. I love that. STEPHANIE: Yeah, you know, there are just so many things almost kind of like work where I had to, like, break down some of my goals. I wanted to, like, hit a certain level. I wanted to, you know, make sure I defeat these bosses that would help me get to those levels. And yeah, I got very into it. It was definitely a big part of my life for a couple of months. I got it originally because I needed a game to play on my flight to Asia back when I went to Japan. And I'm like, oh, like, this looks, you know, fun and engaging, and it will distract me for my, you know, over 10-hour flight. Turns out it distracted me for many, many more hours over several months [laughs] since then. But I had a great time. So yeah, that's what's new for me. Again, it's something I'd never really done before. I will say though I am very behind on my reading goal as a result. [chuckles] JOËL: I feel like this is a classic developer thing to do is, like, use the tools that we're used to in our job and then apply them to other parts of our life. And now it's just like, okay, well, I made a Kanban board to track my progress in this video game. You know, or, in my case, I'm definitely guilty of having drawn a dependency graph for the crafting tree for some video game. So I feel you really strongly there. STEPHANIE: Yes, I'm nodding heavily in agreement. I think it just scratches the same kind of itch of, you know, achieving, like, little things and then achieving one big thing. JOËL: So, speaking of places that are nice to have checklists and, like, well-defined requirements, you and I were talking earlier, and you have recently found some frustration around having user stories be defined well on your current project. STEPHANIE: Yes. So I've been reflecting a little bit about my current project and noticing what I think I might call product smells; I'm not quite sure, just some things I'm seeing in our day-to-day workflow that is getting me thinking. And I'm curious to hear if you've experienced something similar. But I find myself being tasked with a ticket that is quite vague. And maybe this was written by a product owner, or maybe it was written by another developer. And it is not quite actionable yet, so I have to go through the process of figuring out what I'm really needing to do here. I think another thing that has been quite frustrating is, you know, maybe we do find out what we want to do. And, like, I'll go back into the ticket, write down the requirements that I gathered, and do the ticket. I'll ship whatever change was required, and then I'll hear back from someone in a meeting or either as a one-off request in Slack. And it'll be like, "Hey, like, actually, you know, we want this to be different." And maybe you previously said that "Oh, the value for something would be 30. But now we found out more information; it should be 20. And so could you, like, make that change?" And then I'm not really sure what the best way to document a change like that is because it, you know, maybe existed in the previous ticket, but now it has changed. And do I create a new ticket for this, or do I just go ahead and make the code change? Like, who would know this information that we're now carrying about 20 being the value for, let's say, like, days or not meaning something in the code that we're writing? And I guess I've just been really curious about how to make sure that this doesn't become the norm where a lot of these conversations are just happening, and, you know, the people who happen to be in them know that this change happened. But then later on, someone is asking questions about, like, hey, like, when did this change? Or I expected this to be 30. But is this, you know, behaving as expected? So that was [laughs] a bit of a nebulous way of describing just, like, this churn that I feel with being the executor of work. But then, like, a lot of these things changing above me or separate from me and figuring out how to manage that. JOËL: When you were describing this scenario where you've done the work, and then someone's like, "Oh, could we change this value from, like, 30 to 20?" I'm thinking in my mind of the sort of beam that a lot of our designers face where it's like, you know, they have a design. They work on it; they do it. And then show it to a client, and the client is like, "I love this design. But could we just shift this box over, like, one pixel?" Like, they're, like, tiny, tiny, little changes that are kind of requested for change after you've done, like, this big thing. And, oftentimes, those pile-up. It's like, you shift it one pixel. It's like, oh, actually, you know what? Why don't we do it two pixels? And then it's like never-ending cycles, sometimes of, like, minute little changes. STEPHANIE: Yeah. But the minute changes really add up into, I think, really different behavior than what you maybe had decided as a team originally. And in the process of changing and evolving, I don't really know where documentation fits in. I've been working on this project that had a pretty comprehensive product design doc, where they had decided upfront on, you know, how the application is going to behave in many different scenarios. But again, like, that has changed over time. And when I recently had to onboard someone new to this project, you know, we sent over this document, and we're like, yeah, you can, you know, feel free to peruse it. But it's actually quite outdated. And then, similarly, right now, since the features that I'm working on are going through QA, there's been a lot of back and forth about, I'm seeing this, but the doc said that Y is supposed to happen, and I'm not sure if that's a bug or not. And I or someone else has to respond with that context that we were holding in our head about when that change happened. JOËL: That's really interesting. And I think it varies a lot based off the size of the organization. In a smaller organization, you're probably doing a lot of the requirements gathering yourself. You're talking to all the stakeholders. You're probably doing the QA yourself, or you're walking somebody else through QA. Versus a large organization, there might be an entirely separate product team, and a separate QA team, and a separate dev team. And a danger that I've often seen is where all of these teams are just kind of tossing work over the fence. And all you're given is a, you know, a ticket of, like, execute on this. Basically, turn these specs into code. And then you do that, and then you toss it over the fence to the QA team. And they check does the code do these things? And there's so much context that can easily get lost from one step to another. That being said, I think a lot of devs find it frustrating to do some of the requirements gathering work. How do you feel in general about scoping out a ticket or doing follow-up conversations with the product team about, like, "Hey, your idea for the ticket is this. How do you feel about doing these things? Or what if we cut these things?" Are those conversations that you enjoy having? Is that a fun part of the developer role for you? Or do you kind of wish that, like, somebody else did all of that so that you could, like, go heads down just writing code? STEPHANIE: I think it depends. That's a great question. Actually, I have so many thoughts in response. So let me try to figure out where I want to go from here. But I think I used to not like it. I used to be stressed out by it, and sometimes I still am. But when I thought my role was purely executing, to receive a ticket that is a bit vague, you know, I might have been left feeling, like, stuck, like, not knowing where to go from there. But now that has changed a bit because I received some really helpful feedback from an old manager of mine who was kind of invested in my growth. And she really suggested learning to become more comfortable with ambiguity because that just becomes more and more your job, I think, as you progress in your career. And so now I at least know what information I need to go get and have, you know, strategies for doing so. And also knowing that it's my job, like, knowing that no one else might be doing it, and it might just be me so that I can therefore get this ticket done. Because, like you said, that problem of throwing the work over the fence to someone else, at some point, that doesn't work because everyone has too much on their plates. And you have to just decide to be the one to seek the information that you need. JOËL: I think one way that, as developers, we bring a lot of value is that we help to cut through a lot of that ambiguity. I think if we see our role as merely translating a requirements document into code, that's a very simplistic point of view of what a talented developer does. So, like you said, as we grow in our careers, we start dealing with less and less defined things. We often have to start defining the problems that we're given. And we have to have these conversations with other teams to figure out what exactly we want to do. And maybe better understand why is it that we want to do this thing. What is the purpose of it? How are we going to get there? And my favorite: Do we have to do all of these things to hit the minimum value of this goal? Can I split this into multiple tickets? I love breaking down work. If I can make the ticket smaller, I'm all about that. STEPHANIE: Yes. I'm well aware. It's interesting about what you said, though, is that, like, yes, that becomes, in some ways, our superpower. But, for me, where the pain comes in is when that's not part of the expectations, where I am maybe tasked with something that is not clear enough, and yet, the time that I need to find that clarity is not given the respect that it, I think, deserves to build a good product because the expectation is that I should already be making progress on this ticket and that it will be delivered soon. You know, in that situation, I wish I had been in the room earlier. I wish I had been part of the process for developing the product strategy, or even just, like, have come in earlier to be able to ask, you know, why are we building this? And, like, what are some of the limitations on the technical side that we have? Because often, I find that it is a little too...not necessarily too late, but it is quite down the road that we then have to have these conversations, and it doesn't feel good. JOËL: I think that's one of the powerful things that came out of the agile movement was the idea that you have these cross-functional teams, that you don't have a separate product team, a separate dev team, a separate QA team, a separate design team that are all these isolated islands. But instead, you say, okay, we have a cross-functional team that is working on this aspect of the product. And it will be some product people, some dev people, some designers kind of all working together and communicating with each other. I know, shocking concept. And even depending on the context, a big idea is that the client or the customer is a part of that team. So, when we at thoughtbot work with a client, especially when they are maybe a smaller client like a startup founder, we make sure that they feel like they are a part of the team. They are involved in various meetings where we decide things. They have input. You know, they're part of that feedback cycle that we build. But that can also be the case for a larger company where your internal stakeholders are kind of built-in to be sort of part of your team. STEPHANIE: I've seen so many different flavors of trying to do Agile [laughs] that it has lost a little bit of meaning for me these days. And maybe we've incorporated some aspects of it. But then that idea of the tight feedback loops and then a cross-functional team where everyone is communicating that part has gotten a little bit lost, at least on my project. And I imagine that this is common, and our listeners might be finding themselves in a similar situation where things are starting to feel a little more like handing off and a little more like waterfall. [laughs] I'm curious, though, if you found yourself being requested to make a change from what the original decision was, how would you go about documenting that or not documenting it? Where do you think the best place for that information about how this feature now is supposed to work where should that live? JOËL: Are you talking about where do we document that a decision was made to change the original requirements of a task? STEPHANIE: Yes. JOËL: In general, I think that should live on the ticket just because as long as the ticket is live, I think it's good to have all the context on that ticket for whoever's working on it to have access at a glance. Sometimes it's worth it to say, you know what? We don't want to just keep this ticket live for weeks or maybe months on end. Let's ship this ticket, and create a follow-up to make a change later, especially if it's a change that's less important where it's like, you know what? It would be nice to have if...but, again, like, scope creep is a real danger. And so, again, me with the aggressive breaking up of tickets, I love to say, "That's a great idea. It would make a great change, not part of this ticket." So oftentimes, those changes I will push them into another ticket. STEPHANIE: That's interesting. What about documentation beyond the current work? So I'm thinking about once, you know, a feature is delivered, how do people in the organization then know how this feature is supposed to work? Like moving forward as something that is customer-facing. JOËL: That can vary a lot by organization, I think because there's a couple of different aspects to this. You have maybe some internal-facing documentation; maybe some customer support people need to know about the way the interface has changed. And then you also have customer-facing documentation where maybe you want some sort of, you know, you want a blog post talking about the new feature or some kind of release notes or something like that to be shared with your customers. And compiling that might look very different than what you do for your internal service reps. STEPHANIE: Yeah, I like that. It's true that the customer documentation is really helpful. At least for, the product that I'm working on, it has very comprehensive documentation about how to use that for its customers. And that has been really helpful because, hopefully, that should be the truest [laughs] information out there. But sometimes, you know, I find myself in meetings where none of us really know what happens. For example, a question that was asked recently is our product has a free trial capability. But it was unclear what happens to all of the data that the customer is getting access to as a feature. Like, what happens to that data after the free trial ends? Like, if they then have purchased a license, do they still have access to their free trial data? If, you know, there's a lapse between then, does it just get deleted, or will it show up again? And no one really knew the answer to that. And I think that was another area that got my spidey senses tingling a little bit; I think because it reminded me of...there was a definition I read somewhere of legacy code that is basically when the person who has the most context about how a piece of code works and then they leave the company and that institutional knowledge no longer exists, like, that is legacy code. And I almost think that that also applies to product a little bit where a legacy product is something where no one quite knows what is supposed to happen, but it's still being used by users. JOËL: That's a really fun definition there. I think there's sort of two related questions that are slightly different here, which is, one, how does the code behave? So, what happens when someone's trial period expires? And it's quite possible that no one on the team knows what actually happens when that time expires. And then the second question is, what should happen when a trial expires? And it's possible, again, that the product team didn't think through any of the edge cases. They only went for the happy path. And so it's possible if that is also fully undefined and no one knows. STEPHANIE: Yeah, I like that distinction you made a lot because they definitely go hand in hand, where someone realizes that some weird edge case happened, and then suddenly, they're asking those questions. And, you know, we realized, like, oh, like, that just didn't have enough, like, intention or thought behind how it was coded. So, like, it really is; who knows, right? Just whatever seems to happen. And I think that this actually kind of reminds me of a previous episode we did about empowering other departments in the company because, ultimately, a lot of those questions about, like, how does this work? What happens? Ends up going to a developer who has to go and read the code and report back. And while, you know, we do have that power, it can also be a bit of a curse, I think. [laughs] JOËL: I think this is an area where, as developers, we're maybe particularly skilled. Because of the work that we do, our brains are kind of wired to think about all of the edge cases, and sometimes they can be really annoying. But I think there's a lot of value sometimes when maybe the product team comes to us with a maybe somewhat nebulously scoped ticket or a series of tickets for, let's say, a free trial period feature that only goes through the happy path. And then sometimes it's up to us to push back or to follow up and say, "Okay, great. We've got a bunch of tickets for a free trial period. Have you thought about what happens after a trial expires but the person hasn't converted to a paying customer?" And then, oftentimes, the answer is like, "Oh, no, we didn't think about that." And I think oftentimes, as developers, our job is to kind of, like, seek out a lot of those edge cases. And we have a lot of techniques and methodologies that we use to try to find edge cases, things like test-driven development, various modeling tools that we'll try to use to make sure that we don't just crash or do something bad in our code. But what should the actual behavior be? That's a conversation that we need to have. And hopefully, that's one that maybe the product team has already had on their own. But oftentimes, the benefit of having that cross-functional team is the ability to kind of have that back and forth and say, "Hey, what about this edge case? Have we thought about that? How do we want that to behave?" STEPHANIE: Yeah, that actually made me think about the idea of tech debt but almost at a product level, where, hey, it turns out that we have all of these things that we didn't quite think through, and it's now causing problems. But how much do we invest in revisiting it? Because, you know, maybe this feature is several years old, and it was working just okay enough for it to, you know, be valuable. But we're now discovering these things and, you know, like, do we invest in them? Or are we more focused on, you know, coming up with new things and new features for our customers? JOËL: That's a classic prioritization problem. It also kind of reminds me of the idea of an MVP. What are the actual, like, minimum set of features that you need in order to try out something or to ship something to customers? And, you know, maybe we don't need some special behavior if your trial account doesn't convert. Maybe we're okay [laughs] that you log in, and the app just crashes. Probably not, because we would probably want you to convert to a paying customer at some point. But maybe we're okay if you just get a screen that says, "You have no projects," when, in fact, you did have projects. It's just that you're no longer on the free trial. Again, for business reasons, probably we want a call to action there that says, "You have five projects. They are not available to you. Please pay to unlock your projects again." That probably converts better. But, again, now that is a business decision. And that becomes a prioritization question that the team as a whole gets to address. Sometimes it can also be some really fun prioritization things where if you're on a really tight schedule, you might ship some features live knowing that you have a time limit, but you don't have to necessarily ship other things. So let's say you've got a 30-day trial, and maybe you ship that before you've even implemented what the dashboard will look like after your free trial has expired, and that's fine because no one's going to hit that condition for 30 days. So now you've got 30 days to go out and handle that condition. And maybe that's okay because it allowed you to get to market a little bit faster, allowed you to cut scope, break those tickets, yes, and just move that much faster. But it does require discipline because now you're on the clock. You've got 30 days to fix that edge case or potentially face some unhappy customers. STEPHANIE: Yeah, I think that's quite a funny way to handle it. It's really ruthless prioritization [laughs] there. But what you said was very interesting to me because I was thinking about how there is such a focus on new feature development and that being the thing that will attract customers or generate more money. But there is something to be said about investigating some of our old features of our existing system and finding opportunities there. And oftentimes, revisiting them will reduce the amount of pain [chuckles] that, you know, developers feel having to kind of keep track or have an eye on, like, where things are airing out, but then don't have the time to really invest in making it better or making that part of the product better. JOËL: I think that's a great opportunity then to have a conversation with other parts of the team. Typically, I think you have to convert some of those into more of a business case. So the business people in the company or the product people might not care about the sort of raw metrics that you see as a developer. Oh, we got an exception with a stack trace in this part of our app. What does that even mean? But if you say, hey, people who signed up for a free trial and then didn't immediately convert within 30 days who want to come back a month later and convert are unable to do so. And we've seen that that's about 10% of the people who signed up for a free trial. Well, now that's an interesting business question. Are we losing out on potentially 10% of customer acquisition? I'll bet the sales and marketing people care a lot about that. I'll bet the business people care a lot about that. The product people probably care a lot about that. And now we can have a conversation about should we prioritize this thing? Are these metrics that we should improve? Is this a part of our code that's worth investing in? STEPHANIE: Yeah, I like that because, in some ways, asking those questions about how does it work? Like, that is really an opportunity because then you can find out, and then you can make decisions about whether it's currently providing enough value as is or if there is something hiding under there to leverage. JOËL: And I think that's one of the other places where, as developers, we provide value to clients is that we can sort of talk both languages. We can talk product language. We can talk business language. But we can also talk code. And so when we see things like that in code, sort of translate that into, like, what are the business impacts of this code change? Which then allows everyone to make the best possible decisions for the mission of the organization that you're a part of. So we've talked about a variety of sort of patterns and anti-patterns that surround working through some of this churn on a product. I'm curious, Stephanie, for you, what's maybe one concrete thing that you've done recently that you've found has really helped you navigate this and maybe help reduce some of the stress that you feel as you navigate through this? STEPHANIE: Yeah, I think, for me, one of the worst things is when that discussion is had in a meeting or a [inaudible 35:45] and then is not put anywhere. And so, one thing I've been making sure to do is either asking the person who made the request to write it down, either on the ticket or in Slack. Or I will write it down, you know, I will document the outcomes of what we talked about and putting it in a public space so that people are aware. I think that small action has been helpful because we hold so much of this in our heads. And I've been finding that it ends up being hard for people to rotate onto different projects and, you know, get onboarded and up to speed effectively because there's so much knowledge and context transfer happening. But even just putting it in a place where maybe it's not relevant to everyone, but at least they see it. And then the next time that they're asked or maybe, like, do come around to working on this, they, like, have some fragment of a memory that they saw something about this. So that has been really helpful. It actually dovetails really nicely into what we were talking about with opportunities, too, because once it's out there, like, maybe someone else will see it and have an idea about how it could be better or that change not being what they expected, and they can weigh in a little more. So that's what I'm trying to do. And I think it's also nice to see how often that happens, right? If we're constantly seeing things changing because we have a written record of it, that could be helpful in bringing up and investigating further as to, like, why is this happening? Like, why do we experience this churn? And is that something we want to address? JOËL: Yeah, because an element that we haven't talked at all about is any sort of feedback cycle or retrospective, where we can talk about these things and having that written trail and saying, "Oh, we changed this decision five times in the past week, like, really churned there." Now maybe that prioritizes it to be an important thing to talk about and to improve for the next cycle. STEPHANIE: What I feel really strongly about is when, you know, each individual on a team is feeling this pain, but it not being known that it's actually a collective issue. Because maybe these things are happening in one-on-one conversations, and we don't realize that, like, oh, maybe there is something bigger here that we could improve on. And so the more eyes on it there are, the more visible it is, I think, that the easier it is to address. JOËL: I love that, the power of writing things down. On that note, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeee!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Stephanie went to her first WNBA game. Also: Bingo. Joël's new project has him trying to bring in multiple databases to back their ActiveRecord models. He's never done multi-database setups in Rails before, and he doesn't hate it. Stephanie shares bits from a discussion with former Bike Shed host Steph Viccari about learning goals. Four elements stood out: Adventure (try something new) Passion (topic) Profit (from recent learnings) Low-risk (applicable today) = APPL Stephanie and Joël discuss what motivates them, what they find interesting vs. what has immediate business value, and how they advocate for themselves in these situations. They ponder if these topics can bring long-term value and discuss the impact that learning Elm had on Joël's client work. Elm (https://elm-lang.org/) Practical Object-Oriented Design in Ruby (https://www.poodr.com/) Design Patterns in Ruby (http://designpatternsinruby.com/) Quarter Life (https://www.penguinrandomhouse.com/books/579928/quarterlife-by-satya-doyle-byock/) Working Iteratively (https://thoughtbot.com/blog/working-iteratively) Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: All right, I have a new-new thing and an old-new thing to share with you today. So the new-new thing is that I went to my first WNBA game [laughs] last week, which is also my third professional sports game ever, probably. I am not a sports person. But a rather new friend of mine invited me to go with her because they are fans, and so I was like, yeah, sure. I'll try anything once. And I went, and I had a great time. It was very exciting. I mean, I know the basic rules of basketball, right? Get the ball in the hoop. But I was very surprised to see how fast-paced it was. And, you know, I was like, wow, like, this is so much fun. There's so much going on, like, the music, you know, the crowd. It was very energizing. And then my friend actually told me that that was a pretty slow game, [chuckles] relative to how they normally go. And I was like, oh, wow, like, if that was slow, then I can't wait for a real competitive [laughs] game next time. So that's my new-new thing. I had a good time. Will do it again. I'm just, like, a 15-minute bike ride from the stadium for our team in Chicago. It's called The Sky. That's our WNBA team. So yeah, I'm looking forward to being basketball Stephanie, I guess. [chuckles] JOËL: That's really cool. How does the speed compare to other sports you've gone to see? STEPHANIE: I think this is why I was interested because I've really only seen baseball, for which I know very little. And that, I think, is, like, a much slower-paced kind of sport. Yeah, I have some memories of going to, like, college football games, which also, like, quite slow. I just remember standing around for a while. [laughs] So I think basketball might be the thing for me, at least in terms of engaging my interest. JOËL: You want something that actually engages you with the sport the whole time. It's not just a social event themed around occasionally watching someone do something. STEPHANIE: Yes, exactly. I also enjoyed the half-time performances, you know, there was just, like, a local dance team. And I thought that was all just very fun. And, yes, I had a lot to, you know, just, like, point to and ask questions about because there was just so much going on, as opposed to sitting and waiting, at least that was my experience [laughs] at other kinds of sports games. As for the old-new thing, now that it's summer, there is a local bar near me that does bingo every week. But it's not just normal bingo. It's called veggie bingo, which I realize is kind of confusing [chuckles] if you just, like, call it veggie bingo, but it's bingo where you win vegetables or, like, produce from local community gardens and other, you know, small batch food items. And I had a great time doing it last year. I met some new friends. It just became our weekly hangout. And so I'm looking forward to doing that again. And, I don't know, I'm just glad I have fun things to share about what's new in my world now that the weather is warm and I'm doing stuff again. I feel like there was one point in the winter where I was coming [chuckles] onto the show and sharing how I had just gotten a heated blanket in the middle of winter, and that was the most exciting thing going on for me. So it feels good to be able to bring up some new stuff. JOËL: Seasonality is a thing, right? And, you know, there are rhythms in life. And sometimes things are more fast-paced, sometimes they're a bit slower. That's really exciting. Did you take any produce home, or did you win anything when you went to play? STEPHANIE: I did. I won a big bag of produce the last time that I went. At this point, it was last season. But it was right before I was about to go on vacation. So I ended up -- JOËL: Oh no. STEPHANIE: [chuckles] Right. I ended up not being able to, you know, keep it in the fridge and just giving it away to my friends who did not win. So I think it was a good situation overall. That's my tip, is go to bingo or any kind of prize-winning hang out as a group, and then you can share the rewards. It's very exciting. Even if you don't win, you know, like, probably someone else at your table will win, and that is equally fun. JOËL: I think the closest I've been to that experience is going to play, like, bar trivia with some friends and then winning a gift card that covers our dinner and drinks for the evening. STEPHANIE: Yeah, yeah, that's great. I used to go to a local trivia around me too. The best part about bingo, though, is that it requires no skill at all. [laughs] I, yeah, didn't realize, again, how into these kinds of things I would be until I just tried it out. Like, that was...bingo is another thing I don't think I would have internally decided to go do. But yeah, my friends just have all these great ideas about fun things to do, and I will happily join them. So, Joël, what's new in your world? JOËL: So I've recently started a new client project. And one of the really interesting things that I've been doing on this project is trying to bring in multiple databases to back our ActiveRecord models. This is a Rails app. I've never done multi-database setups in Rails before. It's been a feature since Rails 6, but this is my first time interacting with that system. And, you know, it's actually pretty nice. STEPHANIE: Really? It ended up being pretty straightforward or pretty easy to set up? JOËL: Yeah. There's a little bit of futzing around you have to do with the database YAML configuration file. And then what you end up doing is setting up another base class for your ActiveRecord models to inherit from. So, typically, you have that application record that you would inherit from for your primary database. But for other databases, if you want a model to be backed by a table from that system, then you would have a separate base class that all of those models inherit from, and that's pretty much it. Everything else just works. A bunch of your Rake tasks get a little bit different. So you've got to, like, configure your setup scripts and your test scripts and all that thing a little bit differently. But yeah, you can just query, do all the normal things you do with an ActiveRecord model, but it's reading from a different database. STEPHANIE: That's really cool that it ended up being pretty painless. And I'm thinking, for the most part, as a developer, you know, working in that kind of codebase; maybe they don't really need to know too much about the details of the other databases. And they can just rely on the typical Rails conventions and things they know how to do via Rails. Do you suspect that there might be some future where that might become a gotcha or something that someone has to debug a little further because of the multi-database setup? JOËL: There are some infrastructure things, but I think I'm handling all of them upfront. So like I said, configuring various setup scripts, or test scripts, or CI, that kind of thing to make sure that they all work. Once that's all done, I think it should pretty much just work. And people can use them like they would normal ActiveRecord models. The one gotcha is that you can't join models across two different databases. You can't use ActiveRecord to write a query that would try to join two tables that are in different databases because the SQL won't allow for that. So, if you're ever trying to do something like that or you have some kind of association where you're trying to do some special join, that would not work. So, if somebody attempts that, they might get an unexpected error. Other than that, I think it just keeps working as normal, and people can treat it more or less as if it's one database. STEPHANIE: That's interesting. How do you model relationships between tables on the two different databases, then? Like, how would that work? JOËL: I've not gotten that far yet. For some things, I imagine just it's two queries. I'm not sure if the ActiveRecord associations handle that automatically for you. I think they probably will. So you probably can get away with an association where one model lives in one database. Let's say your article lives in one database, and it has many comments that live in a different database. Because then you would make one query to load the article, get the article ID, and then you would do another query to the second database and say, hey, find all the comments with this article ID, which is already, I think, what ActiveRecord does in one single database. It is making two queries. It's just that now those two queries are going to be two different databases rather than to a single one. STEPHANIE: Interesting. Okay. I did think that maybe ActiveRecord did some fancy join thing under the hood. And when you mentioned that that wouldn't be possible when the two tables are on different databases, I was kind of curious about how that would work. But that makes sense. That would be really cool if it is, you know, that straightforward. And, hopefully, it just doesn't become too big of an issue that comes back to haunt someone later. JOËL: Right. So pretty much, if there is a situation where you were relying on a JOIN, you will now have to make two separate queries and then combine the results yourself. STEPHANIE: Right. I also want to give you kudos for doing all the good work of setting it up so that, hopefully, future developers don't have to think about it. JOËL: Kudos to the Rails team as well. It's nice to have that just kind of built into the framework. Again, it's not something I've needed in, you know, a decade of doing Rails, but then, you know, now that I have run into a situation where I need that, it just works out of the box. So that's been really nice. So, a couple of weeks ago, we talked about the fact that we were going through review season and that we had to fill out reviews for ourselves then also fill out peer reviews for each other. You had brought up a really interesting conversation you had about reaching out to other people and trying to get feedback on what kind of review or feedback would be helpful for them. STEPHANIE: I did, yeah. Though, I think in this case, the person writing that feedback actually reached out to me, but certainly, it goes both ways. Spoiler alert - that person was Steph Viccari, former [laughs] host of The Bike Shed. JOËL: So Steph also reached out to me with similar questions. And that spawned a really interesting conversation around personal goals and what it looks like, particularly when it comes to what to learn next in technology. We started discussing things, and I listed out some different things that I was interested in. And then just kind of out of nowhere, Steph just pulls out this, like, oh, I noticed these four elements. And I'm going to list them out here because it's really cool. So these four elements were adventure, so trying something new. Passion, so something that's really exciting to you. Profit something where you can leverage some recent things that you've done to get more value out of some work you've already done. And then finally, low risk, something that would be applicable today. And it just kind of turns out that this makes a funny little acronym: APPL. And apples are often a symbol of learning. So that was kind of a fun coincidence. STEPHANIE: I love when someone is able to just pull apart or to tease out pieces of, you know, something that you might have just, like, kind of dumped all of into a message or something, and then to get, like, a second eye to really pick out the themes is so valuable, I think. And I'm obsessed with this framework. I think we might have come across something new that could really be helpful for a lot of other people. JOËL: It's definitely...I think it shows capacity for a higher level of thinking when someone's able to just look at a bunch of concrete things and say, wait a minute; I'm seeing some larger themes emerge from what you're talking about. And I always really appreciate it when I'm having a conversation with someone, and they're like, "Hey, I think what I'm hearing is this." And you're like, "Whoa, you're totally right. And I did not even know that that's where I was going." STEPHANIE: Absolutely. I'd love to go through this acronym and talk about a few different things that we've learned in our careers that kind of correspond with each of these elements. JOËL: Yeah, that sounds great. So I think, you know, the first one here is adventure, trying something new. So, what's something where you tried something new or adventurous that you think was worthwhile? STEPHANIE: Hosting this podcast. [laughs] It was a huge adventure for me and a really big stretch, I think. And that's what the idea of adventure evokes for me is, like, maybe it's uncharted territory for you, and you might have some reservations about it. But, you know, obviously, the flip side of an adventure is how fun and exciting and just new and stimulating it can be. And so I think, yeah, like, when I first started doing this with you, and even when you first asked me, I was pretty nervous. I was really hesitant. It took me a long time to, you know, think it over. I was like, do I want to commit to something that I have never done before, and it's, like, a pretty longer-term commitment? And I'm really glad I did it. It's certainly been an adventure. It's, you know, got its ups and downs. You know, not every week do I feel like that went really well, like, that was a great episode. Sometimes I'm like, that was just an okay episode, [laughs] and, you know, that's fine too. But I feel like this was really important in helping me feel more confident in sharing my technical opinions, helping me feel more comfortable just kind of, like, sharing where I am and not feeling like I should be somewhere else, like, some other level or have already known something. Like, the point is for us to share the journey week by week, and that was something that was really hard for me. So being on this Bike Shed adventure with you has been very valuable for me. JOËL: Yeah, it's sharing these new things we've learned along the way. STEPHANIE: Literally. Yes. What about you? Do you have something adventurous that you learned? JOËL: I think an important inflection point where I tried something new was when I learned the Elm programming language. So I had mostly done procedural languages back in the day. And then I got into Ruby, did a lot of OO. And then I got into Elm, which is statically-typed, purely functional, all these things that are kind of opposite of Ruby in some ways. But I think it shares with Ruby that same focus on developer happiness and developer productivity. So, in some ways, I felt really at home. But I had to learn just a whole new way of programming. And, one, it's cool. I have a new tool in my belt. And I think it's been a couple of years just learning how to use this language and how to be effective with it. But then afterwards, I spent a couple of years just kind of synthesizing the lessons learned there and trying to see, are there broader principles at play here? Are there ideas here that I can bring back to my work in Ruby? And then maybe even are there some ideas here that intersect with some theories and things that I know from Ruby? So maybe some ways of structuring data or structuring code from functional programming where some best practices there kind of converge on similar ideas as maybe some object-oriented best practices, or maybe some ideas from test-driven development converge on similar ideas from functional programming. And I think that's where, all of a sudden, I was unlocking all these new insights that made me a better Ruby developer because I'd gone on an adventure and done something completely out of left field. STEPHANIE: Yeah, absolutely. Do you remember what was hard about that when you first embarked on learning Elm? JOËL: All the things you're used to doing, you just can't do. So you don't have looping constructs in Elm. The only thing you can do is recursion, which, you know, it's been a long time since CS classes. And you don't typically write recursion in Ruby. So I had to learn a whole new thing. And then it turns out that most people don't write recursion. There's all these other ways of doing things that you have to learn. You have to learn to do folds or to use maps and things like that. Yeah, you're just like, oh, how do I do X in Elm? And you have to figure it out. And then maybe sometimes it turns out you're asking the wrong question. So it's like, oh, how do I do the equivalent of a for loop with array indexes in Elm to, like, iterate through a data structure? And it's like, well, kind of here's technically the way you could do that, but you would never solve a problem in that way. You've got to learn a new way of thinking, a new way of approaching problems. And I think it was that underlying new paradigm that was really difficult to get. But once I did get it, now that I have two paradigms, I think it made me a much more solid developer. STEPHANIE: Right. That sounds very humbling, too, to kind of have to invert what you thought you knew and just be in that, you know, beginner's mindset, which we've talked about a little bit before. JOËL: I think in some ways now being on the other side of it, it's similar to the insights you get from speaking multiple human languages, so being bilingual or trilingual or something like that where instead of just having assumptions about, oh, this is just how language works, because that's how your personal language works, now that you have more than one example to draw on, you can be like, oh, well, here's how languages tend to do things differently. Here's how languages are similar. And I think it gives you a much better and richer feeling for how languages work and how communication works. And similar to having multiple paradigms in programming, I think this has given me a much richer foundation now for exploring and building programs. STEPHANIE: That's really cool. I guess that actually leads quite well into the next element, which is passion. Because once you've tried some new things, you get the information of do I like this thing, or do I not like this thing? And then from there, you know, you gravitate towards the things you are passionate about to get a deeper understanding. And it becomes less about like, oh, just testing out the waters and like, knowing, hey, like, I constantly find myself thinking about this, like, let me keep going. JOËL: Yeah. Or sometimes, it's deciding what do I want to learn next? And you just pick something that's interesting to you without necessarily being like, oh, strategically, I think this is another paradigm that's going to expand my mind. Or this is going to make me, you know, help me get that promotion next quarter, purely based off of interest. Like, this sounds fun. STEPHANIE: That's really interesting because I think I actually came to it from a different angle, where one thing that I think was very helpful in my learning that came just, like, completely internally, like, no one told me to do this was reading books about design patterns. And that was something that I did a couple of years into my career because I was quite puzzled, I suppose, by my day-to-day experience in terms of wanting to solve a problem or develop a feature but not having a very good framework for steps to go about it, or not feeling very confident that I had a good strategy for doing it. It was very, for me, it felt very just kind of, like, throwing pasta to the wall and seeing what would stick. And I was really interested in reducing that pain, basically. And so that led me to read books. And, again, that was not something, like, someone was like, hey, I really think that you could benefit from this. It was just like, well, I want to improve my own experience. And, you know, some of the ones that I remember reading (And this was based off of recommendations from others kind of when I floated the idea.) was, you know, Sandi Metz's Practical Object-Oriented Design in Ruby. Design Patterns in Ruby by Ross Olsen. Those were just, like, purely out of interest. Yeah, I guess I'm curious, for you, what fun and passion look like. JOËL: Yeah, I think one thing that's a really fun side effect of passion learning is that I find that I tend to learn a lot faster and go a lot deeper, or I get more for every individual hour I put into learning just because passion or interest is such a multiplier. Similar to you, I think I went through a time where I was just gobbling up everything I could see on design patterns, and code structure, things like that. Yeah, I've always been really excited about data modeling in general and how to structure programs to make them easy to change while also not putting a high maintenance burden on it, learning those trade-offs, learning those principles, learning a lot of those ideas. I think that desire came out of some pain I felt pretty early on in my programming career, where I was just writing purely self-taught at this point from a few tutorials online. Code beyond a few hundred lines would just kind of implode under the weight of its own complexity. And so, like, I know that professional programmers are writing massively larger programs that are totally fine. So what am I missing? And so I think that sort of spurred an interest. And I've kind of been chasing that ever since. Even though I'm at the point where that is no longer a problem in my daily life, it is still an interest that I keep. STEPHANIE: Yeah. If I were to pull out another interest of yours that I've noticed that kind of seems in the same realm of, you know, you can just chase this forever, is working incrementally, right? And just all the ways that you can incorporate that into your day-to-day. And I know that's something we've talked about a lot. But I think that's really cool because, yeah, it just comes from just a pure desire on your own front to, like, see how far you can take it. JOËL: I think you pulled out something interesting there. Because sometimes, you have an interest in a whole new topic, and sometimes the interest is more about taking something I already know and just seeing can I take it to an extreme? What happens when I really go to the boundaries of this idea? And maybe I don't need to go there ever for a client project. But let me put up a proof of concept somewhere and try it out just for the fun of it to see can I take this idea, then push it to an extreme and see does it break at an extreme? Does it behave weirdly? And that is just an enriching journey in and of itself. Have you ever done, like, a...maybe not a whole learning journey but, you know, taken a few hours, or maybe even, like, some time on one of our investment Fridays to just explore some random idea and try it out? And it's like, huh, that was cool; that was a journey. And then maybe you move on to something next week because it's not like a big planned thing. But you're taking a few hours to dig into something totally random. STEPHANIE: I actually think I'm less inclined to do that than maybe you or other folks are. I find the things I choose to spend my time on do have to feel more relevant to me in the moment or at least in my day-to-day work. And I think that actually is another excellent transition into the last couple of elements in the APPL framework that we've now coined. The next being profit or, I guess, the idea of being valuable to you in your job in that moment, I suppose. Or I guess not even in that moment, but kind of connecting what you're learning to something that would provide you value. So I know you were talking about learning Elm, and now you're able to see all of the value that it has provided, but maybe at the time, that was a little bit less of your focus. But for me, I find that, like, a driver for how I choose to spend my time. Often it's because, yeah, for the goal of reducing pain. Being consultants, we work on a lot of different projects, sometimes in different frameworks, or languages, or new technologies. Like, you've mentioned having to, just now, on your new client project learning how to interact with different databases, and it sounds like older software that you might not have encountered before. And I think that ends up falling higher on my priority list depending on the timing of what I'm currently working on is, oh, like, you know, TypeScript is something that has, like, kind of come and go as my projects have shifted. And so when it comes back to working on something using it, I'm like, oh, like, I really want to focus on this right now because it has very clear value to me in the next three to six months, or however long. But I have also noticed that once I'm off of that project, that priority definitely recedes. JOËL: Yeah, I think that plays into that final element as well of the APPL, the low risk things that are applicable today that have value right now. Those tend to be things like, oh, I see that I'm going to be scheduled on a client that needs this technology next month. Maybe I should learn that, or maybe I should refresh this idea or go a little bit deeper because this is something new that I'm going to need. So, at some point, I knew that there was a Python project coming down the line. I was like, okay, well, maybe I'm going to spend a couple of Fridays digging into some Django tutorials and compare and contrast with Rails. STEPHANIE: The low-risk element is interesting to me because I found it to be a challenging balance to figure out how much time to invest in becoming really comfortable in a new technology. I find myself sometimes learning just enough to get what I need to get done. And then other times really feeling like, wow, like, I wish I knew this better because that would make my life easier, or I would just feel a lot better about what I'm doing. And kind of struggling with when to spend that time, especially when there's, you know, other expectations of me in terms of my delivery. JOËL: Yeah, that almost sounds like a contrast between technologies that fall in that low-risk bucket, like, immediately useful, versus ones that fall in the passion bucket that you're interested in taking deeply and maybe even to an extreme. STEPHANIE: That's really interesting. What I like about this list of themes that we've pulled out is that, like, one thing can fall into a number of different categories. And so it's really quite flexible. It actually reminds me of a book that I just finished reading. The book is called Quarterlife. And the thing that stuck out to me the most is the author, who is a psychotherapist; she has basically come up with two types of people, or at least two things, that end up being really big drivers of, like, human motivation and behavior. And that's stability types and meaning types, and the goal is to have a little bit of both. So you may be more inclined towards stability and wanting to learn the things that you need to know for your job, to do well in your role, kind of like we were talking about to reduce that pain, to feel a little more in control, or have a little more autonomy over your day to day and how you work. And then there's the seeking meaning, and when we talked about adventure and passion, it kind of reminded me of that. Like, those are things that we do because we want to feel something or understand something or because it's fun. And ironically, this list of four things has two that kind of fall into each category. And ultimately, the author, she, you know, was very upfront about needing both in our lives. And I thought that was a really cool distinction. And it was helpful for me to understand, like, oh yeah, like, in the early years of my career, I did really focus on learning things that would be profitable, or valuable, or low risk because those were the things that I needed in my job, like, right now. And I am now feeling stable enough to explore the meaningful aspects and feel excited by trying out things that I think I just wasn't ready for back in the day. But it actually sounds like you may kind of have a different leaning than I do. JOËL: That is really interesting. I think what was really fascinating as you mentioned those two sort of types of people. And, in my mind, now I'm immediately seeing some kind of two-dimensional graph, and now we've got four quadrants. And so are we leaning towards stability versus...was it adventure was the other one? Or meaning. STEPHANIE: Meaning, yes. JOËL: So now you've got, like, your quadrant that is high stability, high meaning, low stability, high meaning, like, all those four quadrants. And maybe these four things happen to fall into that, or maybe there's some other slightly different set of qualities that you could build a quadrant for here. One that is interesting, and I don't know how closely it intersects with this idea of stability versus meaning, is how quickly the things you learn become useful. So that low risk, like that L from APPL, those are things that are immediately useful. So you put a little bit of work learning this, and you can immediately use it on the job. In fact, that's probably why you're learning it. Whereas me going off and learning Elm is not because we've got any clients in the pipeline using Elm. It's purely for interest. Is it going to pay off? I think most learning pays off long-term, especially if it helps you build a richer understanding of the different ways software works or helps you have new mental models, new tools for doing things. And so I think, you know, 5, 6, 7 years later, learning Elm has been one of the highest payoff things that I've done to kind of take my coding career to the next level. That being said, I would not have seen that at the time. So the payoff is much more long-term. How do you kind of navigate when you're trying to learn something, whether you want something with a short-term payoff or a longer-term payoff? STEPHANIE: Yeah, that's so interesting. I wonder if there was maybe someone who could have helped you identify the ways that Elm could have possibly paid off. And I know, you know, you're looking back on it in retrospect, and it's easy to see, especially after many years and a lot of deep thinking about it. But kind of referring back to this idea of seeking meaning and that just being important to feeling happy at your job, like, maybe it was just valuable because you needed to scratch that itch and to experience something that would be interesting or stimulating in that way to prevent burning out or something like that. JOËL: Oh, I like that. So the idea that you're learning a thing, not specifically because you're expecting some payoff in the long term but because of the joy of learning, is reward in and of itself, and how that actually keeps you fresh in the moment to keep going on a career that might, you know, last 5, 10, 20, 30 years, and how that keeps you refreshed rather than like, oh, but, like, I'm going to see a payoff in five years where now, all of a sudden, I'm faced with a problem. And I can be like, ah, yes, of course, monads are what we need here. And that's a nice side effect, but maybe not the main thing you look for when you're going for something in that passion bucket. STEPHANIE: Yeah, absolutely. To go back to your question a little bit, I had mentioned that I was wondering if there was someone who could help point out ways that your interests might be useful. And I think that would be a strategy that I would try if I find myself in that conundrum, I suppose, of, like, being like, hey, like, this is really interesting to me. I'm not able to see any super immediate benefits, but maybe I can go find an expert in this who can share with me, like, from their experience, what diving deep into that topic helped them. And if that's something that I need to then kind of justify to a manager or just kind of explain, like, hey, this is why I'm spending my time doing this is because of this insight that I got from someone else. That would be, I think, a really great strategy if you find yourself needing to kind of explain your reasoning. But yeah, I also think it's, like, incredibly important to just have passion and joy in your work. And that should be a priority, right? Even if it's not immediately clear, the tangible or valuable to the company benefits in the current moment. JOËL: And I think what I'm hearing is that maybe it's a bit of a false premise to say there are some things that you follow for passion that only pay off in the long term. Because if you are in it for passion, then you're getting an immediate payoff regardless. You may also get an additional payoff in the long term. But you're absolutely getting some kind of payoff immediately as well. STEPHANIE: Yeah, I think that's true for adventure because knowing what you don't like is also really valuable information. So, if you try something and it ends up not panning out for you, you know, I think some people might feel a little bit disappointed or discouraged. They think, oh, like, they kind of wasted time. But I don't know; I think that's all part of the discovery process. And that brings you closer and closer to, yeah, knowing what you want out of your learning and your career. JOËL: So I'm really curious now. This whole, you know, APPL framework came out of a very random conversation. Is this something that maybe you're going to take into your own sort of goal-setting moving forward? Maybe try to identify, like, okay, what is something adventurous that I want to do, something I want to do for passion, something that I think for profit, and then something low risk? And then maybe have that inform where you put some energy in the next quarter, the next year, whatever timeline you're planning for. STEPHANIE: Yeah, I thought about this a little bit before we started recording. But one very loose goal of mine...and this actually, I think, came up a little more tangibly after coming back from RubyKaigi and being so inspired by all of the cool open-source tooling and hearing how meaningful it was for people to be working on something that they knew would have an impact on a lot of people in their development experience. Having an impact is something that I feel very passionate about and very interested in. And the adventure part for me might be, like, dabbling a little bit into open-source tooling and seeing if there might be a project that I would be interested or comfortable in dipping my feet into. What about you? Do you have anything in the near or long-term future that might fall into one of these buckets? JOËL: So I do have a list of things. I don't know that I will pursue all of them or maybe any of them. But here's my kind of rough APPL here. So something adventurous, something new would be digging into the language Rust. Again, the idea is to try a completely new paradigm, something low-level, something typed, something that deals with a lot of memory, something that does well with concurrency and parallelism. These are all things that I've not explored quite as much. So this would be covering new ground. Something that is a passion, something that's interesting to me, would be formal methods, so I'm thinking maybe a language like TLA+ or Alloy. Data modeling, in general, is something that really excites me. These techniques that I think build on some of the ideas that I have from types but that go, like, to an extreme and also in a slightly different direction are really intriguing to me. So, if there's something that maybe I'm staying up in the evenings to do, I think that might be the most intriguing thing for me right now. Something that might be more profitable, I think, would be digging into the world of data science, particularly looking at Notebooks as a technology. Right now, when I need to crunch data, I'm mostly just doing spreadsheets. But I think there are some really cool things that we could do with Notebooks that come up in client work. I manage to do them when you're with a random command-line script or sometimes with Excel. But I think having that tool would probably be something that allows me to do that job better. And then, finally, something low-risk that I know we could use on a client project would be digging in more into TypeScript. I know just enough to be dangerous, but we do TypeScript all the time. And so, mastering TypeScript would definitely be something that would pay off on a client project. STEPHANIE: I love that list. Thank you for sharing. JOËL: Also, I just want to note that there are only four things here. It doesn't fully spell APPL because there's no E at the end. And so when I see the acronym now, I think it looks like a stock ticker. STEPHANIE: It really does. But I think it's pretty trendy to have an acronym that's basically a word or a noun but then missing a vowel so... JOËL: Oh, absolutely. Time to register that applframework.com domain. STEPHANIE: Yeah, I agree. I also love what you said. You called it a rough APPL. And that was very [laughs] evocative for me as well. And just thinking about an apple that someone has, like, bitten into a little bit [laughs] and has some rough edges. But yeah, I hope that people, you know, maybe find some insight into the kinds of learnings and goals that they are interested in or are thinking about. And using these themes to communicate it to other people, I think, is really important, or even to yourself. Maybe yourself first and then to others because that's how your co-workers can know how to support you. JOËL: That's really interesting that you are thinking of it in terms of a tool for communication to others. I think when I first encountered this idea, it was more as a tool of self-discovery, trying to better understand why I was interested in different things and maybe better understanding how I want to divide up the energy that I have or the time that I have into different topics. But I can definitely see how that would be useful for communicating with team members as well. STEPHANIE: On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël has a bike shorts update; Stephanie has a garden one. Often, power is centralized within the dev team. This is usually because they are the only ones able to execute. Sometimes this ends up interfering with team processes and workload. Joël is a fan of empowering other teams to do things themselves. Strangler Fig Pattern (https://shopify.engineering/refactoring-legacy-code-strangler-fig-pattern) What Being a Staff Developer Means at Shopify by Rose Wiegley (https://shopify.engineering/what-being-a-staff-developer-means-at-shopify) End-User Programming (https://www.inkandswitch.com/end-user-programming/) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: So, in a recent episode, I had mentioned that I was going to go on vacation on a bike trip and that I had purchased a pair of bike shorts to try out on that trip to see if that would help. And, wow, that was a great purchase. It literally saved my butt. STEPHANIE: That's awesome. I'm really glad that they worked out for you. JOËL: Still sore. This was a five-day biking trip. And I think day two was the worst, but after that, things got better. But the shorts definitely helped. STEPHANIE: I think my favorite part about us talking about biking and bike shorts is that we're finally living up to the name of our podcast. [laughs] Turns out that bikeshedding is actually even more, bikeshedding when it's about actual bike stuff. And a listener named James even wrote in with some pro tips about, you know, how to care for your bike shorts and, you know, have a comfortable biking experience. And gave some good tips for me on some longer rides to check out near me in Chicago. JOËL: So it sounds like there's some crossover between the software developer community and bike enthusiasts community who also tune into this podcast. STEPHANIE: I do think that we have gotten tweets before from, I think, like, the motorcycle Twitter tagging us @_bikeshed, perhaps maybe trying to tag a different account but, yeah, ended up in our Twitter inbox instead. JOËL: Now we just need some sweet, sweet bicycle sponsorships. So, Stephanie, what's been new in your world? STEPHANIE: I have a garden update. Last year, we purchased a small fig tree from the internet. It turns out that you can get little fruit trees delivered to your door. And this was, I think, around the fall, so it was getting a little cooler. And here in Chicago, we have to bring some of our plants inside to overwinter. And so we brought the fig indoors, and it's maybe, like, two or three feet tall. And, you know, over the few months, we were just, like, caring for it. And I was really excited to see that it had started fruiting several months ago. And I got to show it to all of my co-workers in a call. I, like, picked up this kind of large pot with our little fig tree, and I, like, held it really close to my camera and tried to point out the fruit to the other people on the call, which I realized was perhaps not a very effective way to show off my plants. Like, you could just take a picture and send it in Slack. And I was like, yes, I could have done that. But yesterday (Now our fig tree has been outside for a little while since it's warmer.) I noticed that they were ripe, and I got to harvest our figs and eat them, and they were delicious. And I got to update the team on my little fig adventure. And this time I did take pictures of the fruits and sent them in Slack instead of trying to bring this tree in from the outdoors. JOËL: That's exciting. Because I'm a fan of the design pattern, I have to ask, is this a strangler fig? STEPHANIE: It's not a strangler fig, though I have seen one in the wild on a trip to Florida. I saw a really big strangler fig, you know, completely, like, enveloping another tree, and that was really cool. If you ever get to see one in person, I think it's just, I don't know, just really amazing how nature works. JOËL: I did not realize they were wild in Florida, something to keep an eye out for next time I'm there. STEPHANIE: Definitely. So, in a recent retro on my client team, we were discussing the one-off requests our team has been getting from the folks over on the sales and client support side. Oftentimes, this involved running a script in our production console to fix some issue that a customer was experiencing. And we were talking about what we could do to make this process a little more automated, make it a little less time-consuming on our end. Even though it would just take a few minutes to run this script, we were seeing that we were getting this request repeatedly. I'm curious if you've kind of been in this situation before where dev work is required and kind of eating into time that we are trying to be delivering on other feature work for similar one-off requests or to support other folks at the company. JOËL: Yeah. I think it's a pretty common pattern that I've seen. And I think sometimes it can actually start from a healthy place. If you're taking very much of an MVP philosophy and you're building a small version of your product to start with, you're not going to have a whole suite of admin tools available. You might not even have any admin people. It might just be a founder and a technical co-founder. And so, for the first few hundred customers you have, maybe the way you make changes is by loading up the Rails production console and making a change. And that's good enough, but that doesn't scale. STEPHANIE: Yeah. You bring up a good point that I think one thing that we get to experience as consultants is seeing many different companies at different stages in their business. And I think I've seen this issue in many different iterations based on the size of the company, right? So you were saying for an MVP product, there's no admin support at all. Maybe you have a project that is now thinking of how to introduce a little bit of admin tooling and might reach for something lightweight like a gem. I've also seen custom admin dashboards, and that being its own namespace and having all of that feature set hand-rolled, and then maybe some other company might opt for a Software as a Service solution. JOËL: Yeah, there's a lot of different implementations that happen at various stages of companies. I think one thing that does seem to stay pretty constant, though, is oftentimes; other teams don't have the tools they need to make the changes they need to. So, if you have a customer service person and they're receiving a complaint or they're having to make a change, they're not always empowered to make the changes they need to. They need to talk to the dev team, who then need to make changes. And the dev team don't really want to spend their day doing admin work. They are incentivized to ship features. And so both sides are unhappy. And it kind of comes from a sort of fundamental, I think, over-empowering of the dev team and kind of a disempowering of some of the other departments within the company, if that makes sense. STEPHANIE: Yeah, that's interesting because I don't think it necessarily is intentional, the way that that happens, right? It's not like you start building a product, and you are saying, "Okay, we only want to give devs the power to change all of this stuff at the production level." It's just something inherent, I suppose, to the work that we do. And there's a lot of active effort that needs to be taken to spread some of that empowerment around. JOËL: Yeah, generally, it is not some sort of, like, nefarious corporate politics that's happening where the CTO is, like, hoarding all the power, or it's a turf war or anything like that. Like you said, it's kind of an emergent property. As developers, we're often used to being sort of ultra-empowered to do what needs to be done. In general, development teams are highly respected within companies, and so people listen to them. But also, in order to do their job, they need to have access to a lot of things. So you often have production access to all the things and the admin credentials. And if there's something that doesn't work, you write code, and you can change the sort of fundamental underlying platform that you're working with. And so you're generally empowered to make the changes you need to make your life better or if you're blocked on something. And that's not necessarily true for other departments who are working in the system that we're building. STEPHANIE: Yeah, it's kind of interesting the duality that you have identified where we do have all of this power or capability to change the system. But you had mentioned earlier that sometimes it actually gets in the way of our work, that it can be a drag to do if we have other competing priorities, and that those mundane tasks end up being something that we also don't enjoy doing. And so, like you're saying, like, no one is quite happy. I wonder at what point you, as a developer, having repeatedly been asked to do these kinds of tasks for other departments when you, would start advocating for building tooling. JOËL: I don't think there's a kind of a clear dividing line, like, oh, after three requests, you must build a dashboard. It's probably more about just general communication with the other teams. I like to think of it from kind of two perspectives. From the perspective of the developers, how can we keep them efficiently working on what they need to prioritize, which is typically new feature development? And then, from the perspective of other teams, how can they be empowered to do the work that you need to do without getting blocked? Because just like the dev team doesn't like to get blocked on all sorts of things, other teams don't like it either. And so, how can we make sure that other team members within the company are empowered to do their work as efficiently as possible? STEPHANIE: Yeah, that's interesting. I think as an IC, I've been in different positions, depending on the context of my work. There have been times when I've been happy to help with that kind of request, right? Because I know that I'm unblocking someone else. I'm facilitating their work. And they usually appreciate it too. And so maybe if that's still the case and that there's not necessarily any pain that comes with that being just the process that it is from both sides, like, that's perfectly fine. But then it's totally fair for, you know, either party, once they do feel like it's blocking other work, to start looking into maybe how much time you're spending on these one-off requests, especially if it's being spread around to other team members. You know how much effort you're making, but, like, a manager might actually be more aware of how it's affecting multiple folks on the team and wanting to figure out, like, how that sits in with the other priorities that the team is working on. JOËL: Yeah, I'm glad you mentioned talking to other people because I might be quite happy to say, "Oh, I'm going to go and, you know, go into the database and make a small change." But just because it's easy for me to do and I can take, you know, 10 minutes out of my day to do it, doesn't mean that that experience is good for, let's say, a customer service person who had to get blocked or had to ask someone else to help to move this ticket forward. When if it was something they could do themselves, that would have been a much better experience. So, even though it's a very fairly, you know, cheap request and because I don't get them a lot, I'm happy to do them, it's maybe not a good experience for my customer service colleague. So, like you said, it is important to get people's experiences on all sides. STEPHANIE: One thing that I have seen a lot is for these things to start as configuration in a YAML file that requires developers to change and then commit to the codebase whenever, you know, maybe it's, like, a list of products or a list of prices, something that is, you know, really the business domain. And yet we are hard coding it and, like, codifying it into our source control. JOËL: Oof, yes. I have been in those projects, yeah. Now, every time you want to make a change, a business person has to reach out to the dev team, and then you have to make a code change, and then you have to deploy it. And that just becomes a whole thing. And then they come back to you the next day and say, "Oh, actually, we talked about it, and we want it a little bit differently." And you have to go through that process again. STEPHANIE: I think we reach for that just because we think it's faster maybe to set up, you know, some kind of, like, lightweight configuration file, rather than if you're working in Rails, you know, setting up a whole MVC for whatever thing you're trying to configure. And I'm curious if you think that's true or not. JOËL: I think it depends. Sometimes it can be because this data feels very static, kind of hard-coded. And so it's not a thing you would necessarily want to have. In a database, it's more like a constant that you would have in your source control, except that then you find out that your constant is not quite as constant as you thought it was. And I think maybe that's okay. Writing software is all about kind of discovering the problem in the domain as it evolves and trying to not over-engineer things ahead of time. So, if we have a small set of values, maybe they're U.S. states that you deliver to or a small list of products or something that you feel is relatively hard coded, maybe it starts as a constant array hard coded into Ruby, maybe it is a YAML file that you load. Then, over time, there comes a point where you decide this should be a database table, and if it needs to be sort of pre-seeded, then there's a mechanism for that with database seeds in Rails. STEPHANIE: Yeah, that's fair. I find it so interesting because most of the time, I've not seen that transition happen, right? It almost feels like some form of the bystander effect where everyone is just, well, I'm adding just one more thing. So I don't want to make this really big change now. JOËL: And that's true for everything in code, right? You say, "Oh, this deeply nested condition, yeah, it should probably be restructured. But I'm just going to add, you know, an eighth nested level in there. And, like, eight is probably the limit, but mine is going to be the eighth, so it's going to be good." And then somebody comes in and says, "Well, you know, nine is not that bad, but the next person probably should refactor it." And then it's a mess. STEPHANIE: Yeah, it's kind of like the entropy of code, I suppose, [laughs] where, you know, we had said it requires a lot of active energy and effort to make those changes to support other folks in different departments of the company. And I think that's, like, one very common area that we see things starting as configuration but then end up being something that you are needing to support in changing. And I wonder if maybe that is a signal in itself, right? If you are getting this information from another team, like, someone external to the development team, I wonder if that's kind of a clue that this is something that should be reconsidered about whether you start with it being hard-coded. JOËL: That's an interesting thought. There's a sense in which I think these always come from places external to the development team because it's a form of kind of product research when you're trying to understand what the features need to be, what this needs to happen. Unless this hard-coded data is purely structural or internal values, but it rarely is. There probably is a broader discussion to be had about the use of any sort of hard-coded data in a configuration file in a Rails app versus just always starting with a database table. One thing that's nice about always having a database table is that if you ever need to connect it to other data in your system, now you can do things like table joins, where you can't join your users on some kind of YAML array, or you have to do some sort of Ruby Enumerable logic. You can't just do it in SQL. STEPHANIE: Yeah. This is a bit of a tangent, I think. But that reminds me of when I worked at a product company where we had a very robust data warehouse, and all of that information was available to teams on the marketing side and on the data science side. And I actually really liked that because they were able to, you know, construct their own dashboards and queries to get the things that they need. And I've certainly seen what you're saying, this pretty important business information being hard-coded, and that ends up being less accessible, right? And less insightful, really. One other area of this topic that I think I've also bumped into before is specifically a QA engineer or, like, a QA team and empowering them to be able to do their jobs. Oftentimes, I've noticed that QA environments are not as well-maintained as maybe they should be, where the data that's seeded or, you know, kind of overtime in this environment is a little wonky. I've also experienced, while working on a feature, kind of having to go back and forth between whoever is helping QA my work telling them, like, "Oh, this isn't finished yet. So, like, don't worry about this that you're testing," or, you know, "Actually, that does look wrong. But let me look into it over on this end." And I found it sometimes difficult to navigate because I want them to be more empowered to test their feature without that uncertainty over whether something is intentional or actually broken. JOËL: In this case, do you think it's more about communication between development and QA, clear acceptance criteria, or clear descriptions of what changes have been pushed up for review and what's not in scope? Is that where you're headed? STEPHANIE: I think that's a part of it. But I actually think there are more technical considerations, especially in terms of whether our environments all align in terms of the data we're expecting, right? Does our dev environment kind of look like our QA environment, which looks like our production environment? Because I've certainly been in projects where that's, like, all over the place, and that really messes up the different expectations we have. We all know the "Oh, it worked in my local" [laughs] response to when things come up in other environments that are unexpected. And I wonder if there is more attention that we should be having towards making sure that just because this environment is not the main one that we're working in as developers, that people who are having to use it have an equally good user experience. JOËL: I like that you brought up the term user experience because oftentimes, as developers, and just, I think, product teams in general, we're trying to make something good for the customers of the application. But there are a lot of other people that have to interact with it in sort of more ancillary roles; like you mentioned, it might be QA. It might be customer support. It might be business development. And they're not the customer. And so because of that, they're often kind of a second thought or even sort of no thought at all. And so they do their jobs as best they can with what they've got, and sometimes get really creative getting around some of the hurdles that are in place. But we can often, with very little effort because the bar is so low, make these people's lives a lot better by applying just a little bit of the same approach that we would use to make software great for a customer to use for teammates in these other roles. STEPHANIE: Yeah, absolutely. Especially because we have that line of communication open with them, and, like you said, they are also our users of our applications. And especially for QA folks, too, in some ways, they're the first line of defense of our users, right? They are a resource for us to know if the customers will eventually have a poor experience or not. And I was thinking about that back-and-forth communication I mentioned with QA, you know, trying to explain, like, oh, this isn't finished yet, so maybe, like, you should not expect this to happen. But, oftentimes, that perhaps is a signal that we haven't thought about the way that we're developing our feature to be able to be released to customers in a more incremental way. Or we might be hand-waving over something that ends up being a bug later on. JOËL: Definitely. For myself, I see that as a... code smell is maybe not the right term here, but maybe acceptance criteria smell. If I'm trying to write out some acceptance criteria, and I'm having to say, like, "Oh, but, like, ignore this, and, like, pretend this doesn't exist. All of these, like, weird edge cases and exceptions we're trying to put in, are oftentimes a sign that maybe the work was not scoped correctly. STEPHANIE: I'm curious, in your workflow, will you just make those improvements if you have the opportunity to? Or do you end up bringing that to the team or creating a ticket for it? How does that fit in when you identify areas that could be improved? JOËL: I think it depends on the team's current workload. Oftentimes, if it's just something small, it's something I can just slip into my day, and it makes somebody else's life easier, that's great. Otherwise, it can be a thing that needs to be brought up with the team in general. And then it's the thing that we prioritize, and we put it in the backlog because, like you said, the main users of our app are customers. But all of these other teammates are also users of our app in other ways, and so they need certain features to get their job done. And so it's worthwhile to, I think, at a product planning level, take those into account and prioritize them with the customer-facing things. And sometimes, because those other teams don't have as much of a voice at the table, it's up to us as developers because we sometimes have that direct communication where we're talking to them and sort of going back and forth about, "Oh, can you change this in the database for me?" or "Can you do this?" And it can be up to us to champion these other teammates' needs with the team and with the product organization in general. STEPHANIE: Yeah, I really like the way you put that. I think you used the word champion. And I've seen this also go the other direction, where we add more processes in place, where the direct communication that needs to be gatekept a little bit through a manager because the manager is trying to protect the time of the team. And that is one way to handle the issue of these requests taking too much of the team's time. But I think at some point, as an IC, you also have the agency to champion or advocate for how you use your own development time. And that reminds me of something I heard from Rose Wiegley over at Shopify about what it means to be, like, a staff or a senior developer, and that is sharing that I'm going to do this, and this is why. And that means that I won't have time to do this other thing that I may be committed to earlier. But you know, these are my reasons. And if anyone sees any problems with that, let me know. And I've been thinking about that a lot in terms of figuring out how to do the kind of work that I value. And for you and me, that does sometimes mean building those tools to empower people who aren't developers. But that is, yeah, just a way that we can assert a little bit of that agency rather than having to get the buy-in to even consider setting time aside for that work. JOËL: Yeah, I think some of the really fulfilling work that I've done has been just sometimes taking a morning and, quote, unquote, "pairing" with, like, a business development or a customer service person and just saying, "Hey, can I just sit with you while you process this kind of request or problem that you're trying to do?" And then just really seeing what they do and all the steps and being able to ask a lot of questions and kind of putting my product developer hat on. And because then I know, internally, all the things that are happening, I can quickly see, oh, okay, you're- having to do these, like, five steps to get around this really annoying thing that's just, like, a rough corner that we have that I can, like, just easily smooth the way, you know, with a 10-minute one-line fix. I'm going to go and do that, and, you know, by the afternoon, that's already done, and that's saved them so much time or so much annoyance because it's not always time. Sometimes it's just annoyance. And their life is better. And I put very little effort into it. Most of it is just taking the time just to talk to each other and to try to understand each other. So I think we brought up the idea in the beginning of trying to empower other teams to not sort of centralize all the ability to execute on change within the development team. And sometimes, you can go to fairly extreme lengths to that. One that I've seen is the idea of end-user programming or end-user development, where the using the software rather than the team developing it has some sort of way where they can sort of customize or build on, or sometimes even script or -code -their experience. Is that something you've ever had to deal with or interact with on a project? STEPHANIE: Yeah, it's really interesting that you brought that up because I had mentioned going with a SaaS solution earlier as something that I've seen before. And that reminds me of when I worked on a client project where we were using Freshsales to integrate with the business domain of the client. And this would eventually be the main software that the sales team would use. And the reason that we went with Freshsales was because it allowed for a lot of that custom configuration and workflows that they could create for themselves for their needs. Though ironically, as we were kind of butting up into the limitations of Freshsales and how it didn't necessarily work for the way we were representing our data, we kind of joked that we almost wished we had to build the tool from scratch ourselves. So I think there are trade-offs there, you know, folks had done a lot of research to figure out the right SaaS solution for this project that we were doing. And yet, you know, inevitably, like, there were some cons with the third-party and how we were able to integrate with it. And it was actually also replacing something that had been built in-house and had become difficult to maintain or something that the company decided that they didn't want to maintain anymore. So I hate to say it, but I really think it [laughs] depends. JOËL: And now you're getting into the classic build versus buy dilemma for chunks of your software. STEPHANIE: Yeah, absolutely. JOËL: I think a way that I've seen, and this happens in a kind of a smaller sense, is providing escape hatches for data. And so maybe you've got a couple of small dashboards, or you've got just a lot of things that happen in your system. And you don't have the development time, or you don't want to prioritize that time right now to build something custom for maybe your business development team. But you provide certain reports that can be exported as CSV or Excel, which then the business development team will load into Excel and do the work that they need. And now they're empowered to do what they want instead of having to ask for more information or just being limited to what was on that web UI. Similarly, sometimes, when you're able to Import a CSV, I've seen this happen a lot, where in software that's not built just right for a customer service team, they'll often export a CSV of data, put it into Excel, manipulate it the way they really want it to be, and then re-import it into the system. And so that can be a great way to temporarily empower people. I think it's also a product smell. Oftentimes, there's a fundamental flaw of the way that your product works because your team is trying to go around it. It's so bad. But as a shorter-term solution, that can be great. STEPHANIE: That makes me think that Excel is the real end-user programming software. JOËL: It really is. It really is. I do really like the idea of end-user Programming, though. And rather than developers or even product people having to decide how our software should work for our users, shifting that to the masses and letting them have all of that empowerment and agency that we're talking about. There's a technology research lab called Ink & Switch, and they build a lot of really cool end-user programming tools. I think I've seen some, like, note-taking software, that they've done, and just other research into why it's important and how it can impact users. And I have read a little bit of their work, and I think it's really cool. So I'll be sure to add that to our show notes. JOËL: I think even as developers, we like some of these ideas of end-user development. We have that a lot in our tooling. But then, even when we interact with other people's software that we don't own...because we're used to interacting with our own software, we own it. We can change anything we want. We've got complete freedom. But the moment we interact with somebody else's software and, of course, it doesn't work 100% the way we need it to, it is sometimes nice to have sort of ways to hook into it so that we can get the things we want and then maybe do some extra manipulation on our own. And APIs are often how we do that. And so the equivalent of providing an API for another developer, well, what is that for our other teams? STEPHANIE: Yeah, great questions to consider. JOËL: You know, it could be a CSV export. It could be maybe there's some easy way to connect to a Zapier plugin. And now, you know, they don't need to ask the dev team, "Oh, we want to receive this notification email internally when this event happens. They can just connect to a Zapier plugin and have it send an email or do something in Salesforce or all these other things that are helpful in their workflows but that we've not taken the time to build into the core software. And now they're empowered to do their work and not blocked on us. STEPHANIE: That's interesting because as you were talking about that, it made me think of development tooling that we get to integrate with and how those APIs are usually very flexible. And let us decide what we need and ask the API for that as opposed to it dictating it for us. And, you know, if that's something that we get to enjoy, then, yeah, we should certainly think about how you can spread that to others. JOËL: I love that. On that note, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeee!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Stephanie is joined by very special guest, fellow thoughtboter, Senior Developer, and marathon trainer Mina Slater. Mina and Stephanie had just been traveling together for two weeks, sponsored by WNB.rb for RubyKaigi in Matsumoto, Japan, and together, they recount their international adventure! RubyKaigi (https://rubykaigi.org/2023/) WNB.rb (https://www.wnb-rb.dev/) Understanding the Ruby Global VM Lock by observing it by Ivo Anjo (https://rubykaigi.org/2023/presentations/KnuX.html#day1) gvl-tracing (https://github.com/ivoanjo/gvl-tracing) Justin Searls' RubyKaigi 2023 live coverage (https://blog.testdouble.com/field-reports/ruby-kaigi/) Prioritizing Learning episode (https://www.bikeshed.fm/362) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn and today. I'm joined by a very special guest, fellow thoughtboter Mina Slater. Mina, would you like to introduce yourself to our audience? MINA: Yeah. Hi, everyone. I am Mina. I am a Senior Developer on Mission Control, which is thoughtbot's DevOps and SRE team. STEPHANIE: So, Mina, what's new in your world? MINA: Well, I start marathon training this week. So I hope that this conversation goes well and lasts you for three months because you're probably not going to see or hear from me all summer. STEPHANIE: Yes. That sounds...it sounds hard, to be honest, marathon training in the summer. When I was doing a bit more running, I always thought I would wake up earlier than I did and, you know, beat the heat, and then I never would, and that really, like, was kind of rough. MINA: Yeah, actually, I was thinking about my plans for today. I didn't wake up early enough to run in the morning. And so I was calculating, like, okay, by midday, it's going to be too hot. So I'm going to have to wait until, like, 6:00 p.m. [laughs] STEPHANIE: Yeah, yeah. Or, if you're like me, there's a very real chance that you just skip it altogether. [laughter] MINA: Well, I have a deadline, so... [laughs] STEPHANIE: That's true. When is your marathon race? MINA: This is actually the first year I'm doing two in a calendar year. So I'm doing Berlin in September. And then, three weeks after that, I'm going to run one in Detroit. STEPHANIE: Nice. At least you'll be ready. You'll, like, have done it. I don't know; it kind of sounds maybe a bit more efficient that way. [laughs] MINA: Theoretically. But, you know, ask me in October. I'll let you know how it goes. STEPHANIE: That's true. You might have to come back on as a guest. [laughs] MINA: Just to talk about how it went. [laughs] STEPHANIE: Yeah, exactly. MINA: So that's what's new with me. What's new in your world, Steph? STEPHANIE: So, a while back on a previous Bike Shed episode, I talked about joining this client team and, in their daily team syncs, in addition to just sharing what we were up to and what we were working on, we would also answer the question what's something new to us. And that was a space for people to share things that they learned or even just, like, new things that they tried, like food, or activities, or whatnot. And I really enjoyed it as a way to get to know the team, especially when I was new to that client project. And recently, someone on the team ended up creating a random question generator. So now the question for the daily sync rotates. And I've been having a lot of fun with that. Some of the ones that I like are, what made you laugh recently? What's currently playing on your Spotify or YouTube? No cheating. MINA: [laughs] STEPHANIE: And then, yesterday, we had what's for dinner? As the question. And I really liked that one because it actually prompted me to [chuckles] think about what I was going to do for dinner as opposed to waiting till 5:00 p.m. and then stressing because I'm already hungry but don't have a plan [chuckles] for how I'm going to feed myself yet. So it ended up being nice because I, you know, kind of was inspired by what other people mentioned about their dinner plans and got my stuff together. MINA: That's shocking to me because we had just come off of two weeks of traveling together. And the one thing I learned about you is that you plan two meals ahead, but maybe that is travel stuff. STEPHANIE: I think that is extremely correct. Because when you're traveling, you're really excited about all the different things that you want to eat wherever you are. And so, yeah, we were definitely...at least I was planning for us, like, two or three meals [laughs] in advance. MINA: [laughs] STEPHANIE: But, when I'm at home, it is much harder to, I don't know, like, be motivated. And it just becomes, like, a daily chore. [laughs] So it's not as exciting. MINA: I think I'm the same way. I just had a whole bunch of family in town. And I was definitely planning dinner before we had breakfast because I'm like, oh, now I have to be responsible for all of these people. STEPHANIE: Yeah. I just mentioned the questions because I've been really having fun with them, and I feel a lot more connected to the team. Like, I just get to know them more as people and the things they're interested in, and what they do in their free time. So, yeah, highly recommend adding a fun question to your daily syncs. MINA: Yeah, we started doing that on Mission Control at our team sync meetings recently, too, where the first person...we actually have an order generator that somebody on the team wrote where it takes everyone's first and last name and scramble them and then randomizes the order. So you kind of have to figure out where in the queue you are and who's coming up next after you. But the first person that goes in the queue every day has to think of an icebreaker question. STEPHANIE: That's kind of a lot of pressure [laughs] for a daily meeting, especially if you're having to unscramble names and then also come up with the icebreaker question. I personally would be very stressed [laughs] by that. But I also can see that it's...I also think it's very fun, especially for a small team like yours. MINA: Yeah, yeah, just seven of us; we get to know really well what letters are in everyone's names. But I was first today, and I didn't have an icebreaker question ready. So I ended up just passing. So that's also an option. STEPHANIE: That's fair. Maybe I'll link you to our random question generator, so you can find some inspiration. [laughs] MINA: Yeah, it's a ChatGPT situation. STEPHANIE: So you mentioned that you and I had just been traveling together for two weeks. And that's because Mina and I were at RubyKaigi in Matsumoto, Japan, earlier this May. And that's the topic of today's episode: Our Experience at RubyKaigi. And the really cool thing that I wanted to mention was that this was all possible because Mina and I were sponsored by WNB.rb, which is a global community of women and non-binary people working in Ruby. And I've mentioned this group on the show before, but I wanted to plug it again because I think that this was something really special that we got to do. WNB runs a lot of initiatives, like, meetups and panels supporting people to speak at conferences and book clubs. And, you know, just many different programming events for supporting women and non-binary Rubyists in their career growth. And they are recently beginning a new initiative to sponsor folks to attend conferences. And Mina, you and I were the first people to get to try this out and go to an international conference. So that was really awesome. It was something that I don't think I would have done without the support from WNB. MINA: And you almost didn't do. I think there was a lot of convincing [chuckles] that went on at the beginning to kind of get you to, like, actually consider coming with me. STEPHANIE: It's true. It's true. I think you had DMed me, and you were, like, so, like, RubyKaigi, like, eyeball emoji. [laughs] I was, I think, hesitant because this was my first international conference. And so there was just a lot of, like, unknowns and uncertainty for me. And I think that's going to be part of what we talk about today. But is there anything that you want to say about WNB and how you felt about being offered this opportunity? MINA: Yeah. When Emily and Jemma, the founders of WNB, approached us with this opportunity and this offer, I think I was...taken aback is not really quite the right words but, like, surprised and honored, really, I think it's a better word. Like, I was very honored that they thought of us and kind of took the initiative to come to us with this offer. So I'm really grateful for this opportunity because going to RubyKaigi, I think it's always something that was on my radar. But I never thought that...well, not never. I thought that I had to go as a speaker, which would have been, like, a three to five-year goal. [laughs] But to be able to go as an attendee with the support of the group and also of thoughtbot was really nice. STEPHANIE: Yeah, absolutely. That investment in our professional development was really meaningful to me. So, like you, I'm very grateful. And if any of our listeners are interested in donating to WNB.rb and contributing to the community's ability to send folks to conferences, you can do so at wnb-rb.dev/donate. Or, if you work for a company that might be interested in sponsoring, you can reach out to them at organizers@wnb-rb.dev. MINA: I highly recommend doing that. STEPHANIE: So, one of the questions I wanted to ask you about in terms of your RubyKaigi experience was, like, how it lined up with your expectations and if it was different or similar to what you were expecting. MINA: Yeah, I have always heard that when people talk about RubyKaigi as a conference and about its contents, the word that everyone uses to describe it is technical. I have already had sort of a little bit of that expectation going in. But I think my interpretation of the word technical didn't really line up with how actually technical it was. And so that was one thing that was different than what I had expected. STEPHANIE: Could you elaborate on what was surprising about the way that it was technical? MINA: Yeah. I think that when I hear technical talks and having been to some Ruby and Rails confs here in the States, when I hear about technical talks, it's a lot more content about people using the technology, how they use Ruby to do certain things, or how they use Rails to achieve certain goals in their day-to-day work or side projects. But it seems at RubyKaigi; it is a lot more about the language itself, how Ruby does certain things, or how interpreters implement Ruby, the language itself. So I think it's much more lower-level than what I was expecting. STEPHANIE: Yeah, I agree. I think you and I have gone to many of Ruby Central conferences in the U.S., like RubyConf and RailsConf. So that was kind of my comparison as well is that was, you know, the experience that I was more familiar with. And then, going into this conference, I was very surprised that the themes of the talks were, like you said, very focused on the language itself, especially performance, tooling, the history and future of Ruby, which I thought was pretty neat. Ruby turns 30, I think, this year. And one thing that I noticed a lot was folks talking about using Ruby to reflect on itself and the possibilities of utilizing those capabilities to improve our experience as developers using the language. MINA: Yeah. I think one of the things I was really fascinated by is...you had mentioned the performance. There were several talks about collecting how Ruby performs at certain levels. And I thought that that was quite interesting and things I had never thought about before, and I'm hoping to think about in the future. [laughs] STEPHANIE: Yeah. One talk that I went to was Understanding the Ruby Global VM Lock by Ivo Anjo. And that was something that, you know, I had an awareness of that Ruby has this GVL and certain...I had, like, a very hand-wavy understanding about how, like, concurrency worked with Ruby because it hasn't been something that I've really needed to know too deeply in my day-to-day work. Like, I feel a little bit grateful not to have run into an issue where I had to, you know, dive deep into it because it was causing problems. [laughs] But attending that talk was really cool because I liked that the speaker did give, like, an overview for folks who might be less familiar but then was able to get really deep in terms of, like, what he was doing workwise with improving his performance by being able to observe how the lock was being used in different threads and, like, where it might be able to be improved. And he shared some of his open-source projects that I'll link in the show notes. But, yeah, that was just something that I was vaguely aware of and haven't yet, like, needed to know a lot about, but, you know, got to understand more by going to this conference. And I don't think I would have gotten that content otherwise. MINA: Yeah, I agree. The talk that you are referencing is one of my favorite as well. I think, like you, kind of this vague idea of there's things going on under the hood in Ruby is always there, but to get a peek behind the curtain a little bit was very enlightening. I wrote down one of the things that he said about how highly optimized Ruby code can still be impacted and be slow if you don't optimize GVL. And he also shared, I think, some strategies for profiling that layer in your product, if that is something you need, which I thought was really cool. STEPHANIE: Yeah. I think I had mentioned performance was a really big theme. But I didn't realize how many levers there were to pull in terms of the way Ruby is implemented or the way that we are able to use Ruby that can improve performance. And it's really cool to see so many people being experts at all of those different components or aspects of making Ruby fast. [laughs] MINA: Yeah. I think that part of the work that we do on Mission Control is monitoring performance and latency for our clients. And while I don't expect having to utilize some of the tools that I learned at RubyKaigi, I expect being aware of these things helping, I think, in the long run. STEPHANIE: Yeah, absolutely. Joël and I have talked on the show about this idea of, like, push versus pull learning. So push, being you consume content that may not be relevant to you right now but maybe will be in the future. And you can remember, like, oh, I watched a talk on this, or I read something about this, and then you can go refer back to it. As opposed to pull being, like, I have this thing that I don't understand, but I need to know right now, so I'm going to seek out resources about it. And I think we kind of landed on that both are important. But at Kaigi, especially, this was very much more push for me where there's a lot of things that I now have an awareness of. But it's a little different, I think, from my experience at Ruby Central conferences where I will look at the schedule, and I will see talks that I'm like, oh, like, that sounds like it will be really relevant to something I'm working through on my client project or, like, some kind of challenging consulting situation. And so the other thing that I noticed that was different was that a lot of the U.S. conferences are more, I think like business and team challenges-focused. So the talks kind of incorporate both a technical and socio-cultural aspect of the problems that they were solving. And I usually really like that because I find them very relatable to my day-to-day work. And that was something that was less common at Kaigi. MINA: Also, that I've never been to a conference that is more on the academic side of things. So I don't know if maybe that is more aligned with what Kaigi feels like. STEPHANIE: Yeah, that's true. I think there were a lot of talks from Ruby Committers who were just sharing, like, what they've been working on, like, what they've been thinking about in terms of future features for Ruby. And it was very much at the end of those talks, like, I'm open to feedback. Like, look out for this coming soon, or, like, help contribute to this effort. And so it was interesting because it was less, like, here are some lessons learned or, like, here are some takeaways, or, like, here's how we did this. And more like, hey, I'm, you know, in the middle of figuring this out, and I'm sharing with you where I'm at right now. But I guess that's kind of the beauty of the open-source community is that you can put out a call for help and contributions. MINA: Yeah, I think they call that peer review in the academic circles. STEPHANIE: [laughs] That's fair. MINA: [laughs] STEPHANIE: Was there anything else that you really enjoyed about the conference? MINA: I think that one of my favorite parts, and we've talked about this a little bit before, is after hours on the second day, we were able to connect with Emori House and have dinner with their members. Emori House is a group that supports female Kaigi attendees specifically. I think it's that they, as a group, rent out an establishment or a house or something, and they all stay together kind of to look out for each other as they attend this very, I think, male-dominated conference. STEPHANIE: Yeah. I loved that dinner with folks from Emori House too. I think the really cool thing to me is that it's just community and action, you know, like, someone wanted to go to this conference and make it easier for other women to go to this conference and decided to get lodging together and do that work of community building. And that social aspect of conferences we hadn't really talked about yet, but it's something that I really enjoy. And it's, like, one of the main reasons that I go to conferences besides learning. MINA: Yeah, I agree. At the Ruby Central conferences, one of my favorite parts is always the hallway track, where you randomly meet other attendees or connect with attendees that you already knew. And like I mentioned, this dinner with Emori House happened on the second night. And I think by midday second day; I was missing that a little bit. The setup for RubyKaigi, I noticed, does not make meeting people and organizing social events as easy as I had been used to, and part of that, I'm sure, is the language barrier. But some places where I had met a lot of the people that I call conference friends for Ruby Central conferences had been at the lunch table. And Kaigi sets up in a way where they send you out with food vouchers for local restaurants, which I thought was really cool. But it doesn't make meeting people and organizing groups to go out together with people you don't already know a little more difficult. So meeting Emori House on the second night was kind of exactly what I had been missing at the moment. STEPHANIE: Yeah, agreed. I also really thrive off of more smaller group interactions like organically, you know, bumping into people on the hallway track, ideally. I also noticed that, at Kaigi, a lot of the sponsors end up hosting parties and meetups after the conference in the evenings. And so that was a very interesting social difference, I think, where the sponsors had a lot more engagement in that sense. You and I didn't end up going to any of those drink-ups, are what they're called. But I think, similarly, if I were alone, I would be a little intimidated to go by myself. And it's kind of one of those things where it's like, oh, if I know someone, then we can go together. But, yeah, I certainly was also missing a bit of a more organic interaction with others. Though, I did meet a few Rubyists from just other places in East Asia, like Taiwan and China. And it was really cool to be in a place where people are thinking about Ruby differently than in the U.S. I noticed in Japan; there's a lot more energy and enthusiasm about it. And, yeah, just folks who are really passionate about making Ruby a long-lasting language, something that, you know, people will continue to want to work with. And I thought that was very uplifting because it's kind of different from what the current industry in the U.S. is looking like in terms of programming languages for the jobs available. MINA: It's really energizing, I think, to hear people be so enthusiastic about Ruby, especially, like you said, when people ask me what I do here, I say, "Developer," and they say, "Oh, what language do you work in?" I always have to be kind of like, "Have you heard of Ruby?" [laughs] And I think it helps that Ruby originated in Japan. They probably feel a little bit, like, not necessarily protective of it, but, like, this is our own, and we have to embrace it and make sure that it is future-facing, and going places, and it doesn't get stale. STEPHANIE: Right. And I think that's really cool, especially to, you know, be around and, like, have conversations about, like you said, it's very energizing. MINA: Yeah, like you mentioned, we did meet several other Rubyists from, like, East Asian countries, which doesn't necessarily always happen when you attend U.S.-based or even European-based conferences. I think that it is just not as...they have to travel from way farther away. So I think it's really cool to hear about RubyConf Taiwan coming up from one of the Rubyists from Taiwan, which is awesome. And it makes me kind of want to go. [laughs] STEPHANIE: Yeah, I didn't know that that existed either. And just realizing that there are Rubyists all over the world who want to share the love of the language is really cool. And I am definitely going to keep a lookout for other opportunities. Now that I've checked off my first international conference, you know, I have a lot more confidence about [laughs] doing it again in the future, which actually kind of leads me to my next question is, do you have any advice for someone who wants to go to Kaigi or wants to go to an international conference? MINA: Yeah, I think I have both. For international conferences in general, I thought that getting a buddy to go with you is really nice. Steph and I were able to...like, you and I were able to kind of support each other in different ways because I think we're both stressed [laughs] about international travel in different ways. So where you are stressed, I'm able to support, and where I'm stressed, you're able to support. So it was really nice and well-rounded experience because of that. And for RubyKaigi specifically, I would recommend checking out some of the previous year's talks before you actually get there and take a look at the schedule when it comes out. Because, like we said, the idea of, I think, technical when people use that word to describe the content at RubyKaigi is different than what most people would expect. And kind of having an idea of what you're getting into by looking at previous videos, I think, will be really helpful and get you in the right mindset to absorb some of the information and knowledge. STEPHANIE: Yeah, absolutely. I was just thinking about...I saw in Ruby Weekly this week Justin Searls had posted a very thorough live blogging of his experience at Kaigi that was much more in the weeds of, like, all of the content of the talks. And also had tips for how to brew coffee at a convenience store in Japan too. So I recommend checking that out if folks are curious about...especially this year before the videos of the talks are out. I think one thing that I would do differently next time if I were to attend Kaigi or attend a conference that supports multiple languages...so there were talks in Japanese and English, and the ones in Japanese were live interpreted. And you and I had attended, like, one or two, but it ended up being a little tough to follow because the slides were a little bit out of sync with the interpretation. I definitely would want to try again and invest a little more into attending talks in Japanese because I do think the content is still even different from what we might be seeing in English. And now that I know that it takes a lot of mental energy, just kind of perhaps loading up on those talks in the morning while I'm still, you know -- MINA: [laughs] STEPHANIE: Fresh-faced and coffee-driven. [laughs] Rather than saving it for the afternoon when it might be a little harder to really focus. MINA: I think my mental energy has a very specific sweet spot because definitely, like, late in the afternoon would not be good for that. But also, like, very early in the morning would also not be very good for that because my coffee hasn't kicked in yet. STEPHANIE: That's very real as well. MINA: Do you think that there is anything that the conference could have done to have made your experience a little tiny bit better? Is there any support that you could have gotten from someone else, be it the conference, or WNB, or thoughtbot, or other people that you had gone with that could have enhanced this experience? STEPHANIE: Hmm, that's an interesting question. I'm not really sure because I was experiencing so many new things -- MINA: [laughs] STEPHANIE: That that was kind of, like, what was top of mind for me was just getting around even just, like, looking at all the little sponsor booths because that was, like, novel for me to see, like, different companies that I've never heard of before that I think when I asked you about expectations earlier, like, I actually came in with not a lot of expectations because I really was just open to whatever it was going to be. And now that I've experienced it once, I think that I have a little more of an idea of what works for me, what I like, what I don't like. And so I think it really comes down to it being quite a personal experience and how you like to attend conferences and so -- MINA: For sure. STEPHANIE: At the end of the day, yeah, like, definitely recommend just going if that opportunity is available to you and determining for yourself how you want that experience to be. MINA: Certainly. I think just by being there you learn a lot about what you like in conferences and how we like to attend conferences. On a personal level, I'm also an organizer with Ruby Central with their scholarship committee. And that's somewhere where we take new Rubyists or first-time conference attendees and kind of lower the barrier for them to attend these conferences. And the important part I wanted to get to is setting them up with a mentor, somebody who has attended one of these conferences before that can kind of help them set goals and navigate. And I thought that someone like that would...at RubyKaigi, being both our first times, might be useful. STEPHANIE: Yeah, absolutely. I think that's totally fair. One thing I do really like about the Ruby Central conferences is the social support. And I think you had mentioned that maybe that was the piece that was a little bit missing for you at this conference. MINA: Yeah. I know that someone had asked early on, I think, like, the night before the conference officially kicked off, whether there is a Slack or Discord space for all conference attendees so that people can organize outings or meals. And that is definitely something that at least the Ruby Central conferences have, and I imagine other conferences do too, that was missing at Kaigi as well. STEPHANIE: I'm wondering if you would go to Kaigi again and maybe be that mentor for someone else. MINA: I think so. I think I had different feelings about it when we were just leaving the conference, kind of feeling like some of these things that I'm learning here or that I'm being made aware of rather at RubyKaigi will come up important in the future, but maybe not right away. So then I was kind of walking away with a sense of, like, oh, maybe this is a conference that is important, but I might deprioritize if other opportunities come up. But then I started to kind of, like, jot down some reflections and retroing with myself on this experience. And I thought what you mentioned about this being the sort of, like, the push learning opportunity is really nice because I went in there not knowing what I don't know. And I think I came out of it at least being a little bit aware of lots of things that I don't know. STEPHANIE: Yeah, yeah. Maybe, like, what I've come away with this conversation is that there is value in conferences being different from each other, like having more options. And, you know, one conference can't really be everything for everyone. And so, for you and I to have had such a very different experience at this particular conference than we normally do, that has value. It also can be something that you end up deciding, like, you're not into, and then you know. So, yeah, I guess that is kind of what I wanted to say about this very new experience. MINA: Yeah, having new experiences, I think, is the important part. It's the same idea as you want to get a diverse group of people in the room together, and you come out with better ideas or better products or whatever because you have other points of view. And I think that attending conferences, even if not around the world, that are different from each other either in academia or just kind of, like, branching out of Ruby Central conferences, too, is a really valuable experience. Maybe conferences in other languages or language-agnostic conferences. STEPHANIE: Yeah, well said. On that note, shall we wrap up? MINA: Let's do it. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeee!!!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël gives a recap after attending RailsConf 2023 in Atlanta, Georgia (and yes, there was karaoke!
Engineering manager at Vox Media and author Nicole Zhu joins Stephanie on today's episode to discuss her writing practice. nicoledonut is a biweekly newsletter about the writing process and sustaining a creative life that features creative resources, occasional interviews with creative folks, short essays on writing and creativity, farm-to-table memes and TikToks, and features on what Nicole is currently writing, reading, and watching. This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Kieran Culkin on learning about billionaires filming Succession (https://www.tiktok.com/@esquire/video/7215641441597410603?_r=1&_t=8bPK4Ingkf5) The Home Depot skeleton (https://twitter.com/jenni_tabler/status/1566266554240888832) Nicole Zhu's newsletter (https://nicoledonut.com/) The Making of a Manager by Julie Zhuo (https://www.juliezhuo.com/book/manager.html) Saving Time by Jenny Odell (https://www.penguinrandomhouse.com/books/672377/saving-time-by-jenny-odell/) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. And today, I'm joined by my friend and special guest, Nicole Zhu. NICOLE: Hi, I'm so excited to be here. My name is Nicole, and I am an Engineering manager at Vox Media and a writer. STEPHANIE: Amazing, I'm so thrilled to have you here. So, Nicole, we usually kick off the show by sharing a little bit about what's new in our world. And I can take us away and let you know about my very exciting weekend activities of taking down our Halloween skeleton. And yes, I know that it's April, but I feel like I've been seeing the 12-foot Home Depot skeletons everywhere. And it's becoming a thing for people to leave up just their Halloween decorations and, just as the other holidays keep rolling on, changing it up so that their skeleton is wearing like bunny ears for Easter or a leprechaun hat for St. Patrick's Day. And we've been definitely on the weird skeleton in front of the house long past the Halloween train for a few years now. Our skeleton's name is Gary. And it's funny because he's like a science classroom skeleton, so not just plastic. He's actually quite heavy. NICOLE: He's got some meat to the bones. [laughs] STEPHANIE: Yeah, yeah, and physiologically correct. But we like to keep him out till spring because we got to put him away at some point so that people are excited again when he comes back out in October. And the kids on our block really love him. And yeah, that's what I did this weekend. [laughs] NICOLE: I love it. I would love to meet Gary one day. Sounds very exciting. [laughs] I do get why you'd want to dress up the skeleton, especially if it's 12 feet tall because it's a lot of work to put up and take down for just one month, but that's fascinating. For me, something new in my world is the return of "Succession," the TV show. STEPHANIE: Oh yes. NICOLE: I did not watch yesterday's episode, so I'm already spoiled, but that's okay. But I've been getting a lot of Succession TikToks, and I've been learning a lot about the making of the show and the lives of the uber-rich. And in this one interview with Kieran Culkin, the interviewer asked him, "What's something that you learned in shooting the show about the uber-rich about billionaires that's maybe weird or unexpected?" And Kieran Culkin says that the uber-rich don't have coats because they're just shuttled everywhere in private jets and cars. They're not running to the grocery store, taking the subway, so they don't really wear coats, which I thought was fascinating. It makes a lot of sense. And then there was this really interesting clip too that was talking about the cinematography of the show. And what is really interesting about it is that it resists the wealth porn kind of lens because it's filmed in this mockumentary style that doesn't linger or have sweeping gestures of how majestic these beautiful cities and buildings and apartments they're in. Everything just seems very matter of fact because that is just the backdrop to their lives, which I think is so interesting how, yeah, I don't know, where I was like, I didn't ever really notice it. And now I can't stop seeing it when I watch the show where it's about miserable, rich people. And so I like that the visual language of the show reflects it too. STEPHANIE: Wow, yeah, that makes a lot of sense. The coat thing really gets me because I'm just imagining if I could be perfectly climate controlled all the time. [laughs] NICOLE: Right? Oh my gosh, especially you're based in Chicago [laughs], that is when you can retire the winter coat. That is always an important phase. STEPHANIE: Yeah, seriously. I also am thinking now about just like the montages of showing a place, just movies or shows filmed in New York City or whatever, and it's such...so you know it's like the big city, right? NICOLE: Mmm-hmm, mm-hmm. STEPHANIE: And all of that setup. And it's really interesting to hear that stylistically, that is also different for a show like this where they're trying to convey a certain message. NICOLE: Yeah, yeah, definitely. STEPHANIE: So I'm really excited to have you on The Bike Shed because I have known you for a few years. And you write this really amazing newsletter called "nicoledonut" about your writing practice. And it's a newsletter that I open every other week when you send out a dispatch. And last year at RubyConf, they had a conference track called Bringing Your Backgrounds With You. And there were talks that people gave about how the hobbies that they did outside of work or an identity that they held made them a better developer, like, affected how they showed up at work in a positive way. And as someone who has always been really impressed by the thoughtfulness that you apply to your writing practice, I was really curious about how that shows up for you as an engineering manager. NICOLE: Definitely a great question. And to provide a bit of context for listeners, I feel like I have to explain the newsletter title because it's odd. But there's a writer who I really love named Jenny Zhang, and her handle across the Internet is jennybagel. And so I was like, oh, that would be so funny. I should be nicoledonut. I do love donuts. My Neopets username was donutfiend, so it was -- STEPHANIE: Hell yeah. NICOLE: But anyway, so that was kind of...I was like, I need to come up with some fun title for this newsletter, and that is what I settled on. But yes, I've written personal essays and creative nonfiction. And my primary focus more recently these past few years has been fiction. And this newsletter was really kind of born out of a desire to learn in the open, provide resources, act as kind of a journal, and just process ideas about writing and what it means to kind of sustain a creative life. So it has definitely made me more reflective and proactively, like you said, kind of think about what that means in terms of how that transfers into my day job in engineering. I recently moved into management a little over a year ago, and before that, I was a senior full-stack engineer working on a lot of our audience experiences and websites and, previously, more of our editorial tools. So I think when it comes to obviously writing code and being more of an individual contributor, I think you had previously kind of touched on what does it mean to treat code as a craft? And I do think that there are a lot of similarities between those two things because I think there's creativity in engineering, of course. You have to think about going from something abstract to something concrete. In engineering, you're given generally, or you're defining kind of requirements and features and functionality. You may be make an engineering plan or something like that, an EDD, given those constraints. And then I think writing is very similar. You outline, and then you have to actually write the thing and then revise. I do think writing is not necessarily as collaborative as coding is, perhaps, but still similar overall in terms of an author having a vision, dealing with different constraints, if that's word count, if it's form or structure, if it's point of view, things like that. And that all determines what the outcome will be. You always learn something in the execution, the idea that planning can only take you so far. And at a certain point, you gather as much background knowledge and information and talk to as many people. Depending on the kinds of writing I do, I have or haven't done as much research. But at a certain point, the research becomes procrastination, and I know I need to actually just start writing. And similarly, with engineering, I think that's the piece is that once you actually start implementation, you start to uncover roadblocks. You uncover questions or complications or things like that. And so I think that's always the exciting part is you can't really always know the road ahead of you until you start the journey. And I also think that in order to benefit from mentorship and feedback...we can talk more about this. I know that that's something that is kind of a larger topic. And then another thing I think where the two are really similar is there's this endless learning that goes with each of them. I guess that's true of, I think, most crafts. Good practitioners of the craft, I think, take on that mindset. But I do think that obviously, in engineering, you have industry changes, new technologies emerging really frequently. But I do think that good writers think about that, too, in terms of what new novels are coming out. But also, how do you build a solid foundation? And I do think it's that contrast that applies in any craft is, you know, you want to have a good solid foundation and learn the basics but then keep up to date with new things as well. So I think there was this...there's this meme I actually did include in the newsletter that was...it's the meme of these two guys looking at different windows of a bus, and one looks really sad, and one looks really happy. But the two of them have the same caption, which is there's always more to learn. And so I think that is the two sides of the coin [laughs]. I think that is relevant in engineering and writing that I've kind of brought to both of those practices is trying to be optimistic [laughs] about the idea that there's always more to learn that that's kind of the thought of it. And then certainly, when it comes to management, I do think that writing has proven really valuable in that very obvious sense of kind of practical communication where I just write a lot more. I write a lot more things that are not code, I should say, as a manager. And communication is really at the forefront of my job, and so is demonstrating curiosity and building empathy, fostering relationships with people. And I do think that particularly writing fiction you have to be curious about people I think to be a writer. And I think that is true of managers as well. So I do think that has been a really interesting way that I didn't anticipate writing showing up in my day job but has been a really helpful thing and has made my work stronger and think about the people, the process, and kind of what we do and why a little differently. STEPHANIE: Yeah, absolutely. Wow, you got into a lot of different things I'm excited to keep discussing further. But one thing that I was thinking about as you were talking was, have you heard of the adage, I guess, that code is read many more times than it's written? NICOLE: Hmm, I think I have, yeah. STEPHANIE: I was thinking about that as you were talking because, in some ways, in most ways, actually, if you ascribe to that adage, I suppose, we write code for others to read. And I think there's an aspect of code telling a story that is really interesting. I've heard a lot of people advocate for writing, thoughtbot included, writing your tests like they're telling a story. And so when a future developer is trying to understand what's going on, they can read the tests, understand the setup, read what is being tested, and then read what the expected outcome is and have a complete picture of what's going on. The same goes for commit messages. You are writing little bits of documentation for people in the future. And I've also been thinking about how legacy code is just this artifact as well of all of the changes that an organization might have gone through. And so when you see something that you see a bit of code that is really weird or gets your spidey senses tingling, it's almost like, oh, I wonder what happened here that led to this piece left behind? NICOLE: Yeah, definitely. Now that you're talking about it, I also think of pull requests as a great way to employ storytelling. I remember there definitely have been times where myself or other engineers are working on a really thorny problem, and we always joke that the PR description is longer than the change. And it's like, but you got to read the PR description in order to understand what change you're making and why. And here's the backstory, the context to kind of center people in that. As a manager, I think about storytelling a lot in terms of defining purpose and providing clarity for teams. I was reading Julie Zhuo's "The Making of a Manager," and it was a really kind of foundational text for me when I first was exploring management. And she kind of boils it down to people, purpose, and process. And so I do think the purpose part of that is really tied to clear communication. And can you tell a story of what we're doing from really high-level vision and then more tactically strategy? And then making sure that people have bought into that, they understand, can kind of repeat that without you being there to remind them necessarily. Because you really want that message to carry through in the work and that they have that understanding. Vision is something I only recently have really started to realize how difficult it is to articulate. It's like you don't really understand the purpose of vision until you maybe don't have one, or you've been kind of just trying to keep your head afloat, and you don't have a Northstar to work towards. But I do think that is what plays into motivation, and team health, and, obviously, quality of the product. So yeah, that's kind of another dimension I've been thinking of. And also our foes actually. Sorry, another one. Our foes, I think, like outages and incidents. I think that's always a fun opportunity to talk about stories. There was a period of time where every time we had an incident, you had to present that incident and a recap of it in an engineering all-hands every month. And they ended up being really fun. We turned something that is ostensibly very stressful into something that was very entertaining that people could really get on board with and would learn something from. And we had the funniest one; I think was...we called it the Thanks Obama Outage because there was an outage that was caused by a photo of Barack Obama that had been uploaded in our content management system, as required no less, that had some malformed metadata or something that just broke everything. And so, again, it was a really difficult issue [laughs] and a long outage. And that was the result that I remember that presentation being really fun. And again, kind of like mythmaking in a way where that is something that we remember. We pay attention to that part of the codebase a lot now. It's taught us a lot. So yeah, I do think storytelling isn't always necessarily the super serious thing, but it can also just be team building, and morale, and culture as well. STEPHANIE: Yeah, absolutely. I think what you said about vision really resonates with me because if you don't have the vision, then you're also not making the best decisions you can be making even something as low-level as how you write the code. Because if you don't know are we going to be changing this feature a month from now, that might dictate how you go forth with implementation as opposed to if you know that it's not in the company's vision to really be doing anything else with this particular feature. And you then might feel a little more comfortable with a more rudimentary approach, right? NICOLE: Yeah, totally. Whether or not it's, we've over-optimized or not or kind of optimized for speed. Like, it's all about trade-offs. And I do think, again, like you said, having a vision that always you can check your decision-making against and inform the path ahead I think is very, very helpful. STEPHANIE: When you write, do you also keep that in mind? Like, do you write with that North Star? And is that really important to your process? NICOLE: I think it depends. I think that writing can be a little more at a slant, I suppose, is how I think of it because I don't always...just similar to work, I don't always come in with a fully-fledged fleshed-out vision of what I want a piece to be. The most recent piece I've been working on actually I did have kind of a pretty, I think, solid foundation. I've been working on this story about loneliness. And I knew that I wanted to base the structure on the UCLA...a UCLA clinic has this questionnaire that's 20 items long that is about measuring loneliness on a scale. And so I was like, okay, I knew that I wanted to examine dimensions of loneliness, and that would be the structure. It would be 20 questions, and it would be in that format. So that gave me a lot more to start with of, you know, here's where I want the piece to go. Here's what I want it to do. And then there have definitely been other cases where it's more that the conceit seems interesting; a character comes to mind. I overhear a conversation on the subway, and I think it's funny, and that becomes the first thing that is put on the page. So I definitely have different entry points, I think, into a draft. But I will definitely say that revision is the phase where that always gets clarified. And it has to, I think, because as much as I'm sometimes just writing for vibes, it's not always like that. And I do think that the purpose of revision is to clarify your goals so you can then really look at the piece and be like, is it doing what I want it to? Where is it lacking? Where's it really strong? Where's the pacing falling flat? And things like that. So I do think that sooner or later, that clarity comes, and that vision comes into focus. But it isn't always the first thing that happens, I think, because I do think the creative process is a little bit more mysterious, shall we say, than working on an engineering team. [laughs] STEPHANIE: Yeah. Well, you started off responding to my question with it depends, which is a very engineering answer, but I suppose -- NICOLE: That is true. That is true. You got me. [laughs] STEPHANIE: It applies to both. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! STEPHANIE: You mentioned revision. And so, I do want to talk about feedback because I think that is an important part of the revision process. And I have really loved what you've had to say about writing feedback and your experience with writing feedback, especially in writing workshops. And I have always been really curious about what we might be able to learn about receiving feedback in code review. NICOLE: When it comes to receiving feedback, I think I wrote a two-part series of my newsletter, one that was about providing feedback, one that was about receiving it. I think on the side of receiving feedback, first and foremost, I think it's important to know when you're ready to share your work and know that you can share multiple times. In writing, that can be I show a very early draft to my partner who is the person who kind of reads everything and anything at any stage. It's something less polished, and I'm really just testing ideas. But then obviously, if there's something that is more polished, that is something I would want to bring to a writing group, bring into a workshop, things like that. Similarly, as engineers, I think...thank God for GitHub drafts actually adopting literally the way in which I think of that, right? STEPHANIE: Yeah. NICOLE: You can share a branch or a GitHub PR in progress and just check the approach. I've done that so many times, and really that helped so much with my own learning and learning from mentors in my own organization was checking in early and trying to gut-check my work earlier as opposed to later. Because then you feel, I think, again, a bit more naturally receptive because you're already in that questioning phase. You're not like, oh, this is polished, and I've written all the tests, and the PR description is done. And now you want me to go back and change the whole approach from the ground up. That can feel tough. I get that. And so I think, hand in hand, what goes with that is whose feedback are you interested in? Is that a peer? Is it a mentor? I think obviously leaning on your own team, on senior engineers, I do think that is one of the primary, I think, expectations of a senior engineer is kind of multiplying the effectiveness of their peers and helping them learn and grow. So I do think that that's a really valuable skill to develop on that end, but also, again, just approaching people. And obviously, different teams have different processes for that, if it's daily stand-ups, if it's GitHub reminders, automated messages that get pulled up in your channel, things like that. But there are ways to build that into your day-to-day, which I think is really beneficial too. And then there's also the phase of priming yourself to receive the feedback. And I think there's actually a lot of emotional work that I don't think we talk about when it comes to that. Because receiving feedback can always be vulnerable, and it can bring up unexpected emotions. And I think learning how to regulate the emotional response to that is really valuable for us as people but obviously within the workplace too. So I've found it really helpful to reflect if I'm getting feedback that...well, first of all, it depends on the format. So I think some people prefer verbal feedback, some people will prefer written. I think getting it in the form of written feedback can be helpful because it provides you some distance. You don't have to respond in the moment. And so I've definitely had cases where I then kind of want to reflect on why certain suggestions might elicit certain reactions if I have a fight or flight response, if I'm feeling ashamed or frustrated, or indignant, all the range of emotions. Emotions are, to put the engineering hat on, are information. And so I think listening to that, not letting it rule you per se but letting it inform and help you figure out what is this telling me and how do I then respond, or what should I do next? Is really valuable. Because sometimes it's not, again, actually the feedback; maybe it's more about that, oh, it's a really radical idea. Maybe it's a really...it's an approach I didn't even consider, and it would take a lot of work. But again, maybe if I sit and think about it, it is the scalable approach. It's the cleaner approach, things like that. Or are they just touching on something that I maybe haven't thought as deeply about? And so I think there is that piece too. Is it the delivery? Is it something about your context or history with the person giving the feedback too? I think all of those, the relationship building, the trust on a team, all plays into feedback. And obviously, we can create better conditions for exchanging and receiving feedback. But I do think there's still that companion piece that is also just about, again, fostering team trust and culture overall because that is the thing that makes these conversations all the easier and less, I think, potentially fraught or high pressure. STEPHANIE: 100%. Listeners can't see, but I was nodding very aggressively [laughs] this entire time. NICOLE: Loved it. STEPHANIE: And I love that you bring up interpersonal relationships, team culture, and feelings. Listeners of the show will know that I love talking about feelings. But I wanted to ask you this exact question because I think code review can be so fraught. And I've seen it be a source of conflict and tension. And I personally have always wanted more tools for giving better feedback. Because when I do give feedback, it's for the person to feel supported to help push their work to be better and for us to do good work as a team. And I am really sensitive to the way that I give feedback because I know what it's like to receive feedback that doesn't land well. And when you were talking about investigating what kinds of feelings come up when you do receive a certain kind of comment on a code review or something, that was really interesting to me. Because I definitely know what it's like to have worked really, really hard on a pull request and for it to feel very precious to me and then to receive a lot of change requests or whatever. It can be really disappointing or really frustrating or whatever. And yeah, I wish that we, as an industry, could talk about this stuff more frequently. NICOLE: Yeah, for sure. And I do think that you know, I think the longer you work with someone, ideally, again, the stronger relationship you form. You find your own ways of communicating that work for you. I think actually what I've learned in management is, yes, I have a communication style, but I also am flexible with how I work with each of my reports, who, again, have very different working styles, communication styles, learning styles. I don't believe that the manager sets the standards. I think there is a balance there of meeting people where they are and giving them what they need while obviously maintaining your own values and practices. But yeah, certainly, again, I think that's why for perhaps more junior engineers, they might need more examples. They might not respond well to as terse a comment. But certainly, with engineers, senior engineers that I've worked with, when I was starting out, the more we developed a relationship, they could just get a little bit more terse. For example, they could be like, "Fix this, fix that," and I would not take it personally because we had already gone through the phase where they were providing maybe some more detailed feedback, links to other examples or gists, or things like that, and our communication styles evolved. And so I do think that's another thing to think about as well is that it doesn't have to be static. I think that's the value of a team, and having good team process, too, is ideally having arenas in which you can talk about how these kinds of things are going. Are we happy with the cadence? Are we happy with how people are treating each other and things like that? Are we getting timely feedback and things like that? That's a good opportunity for a retrospective and to talk about that in a kind of blameless context and approach that more holistically. So I do think that, yeah, feedback can be very fraught. And I think what can be difficult in the world of engineering is that it can be very easy to then just be like, well, this is just the best way for the work. And feelings are, like you said, not really kind of considered. And, again, software development and engineering is a team sport. And so I do think fostering the environment in which everyone can be doing great work is really the imperative. STEPHANIE: Yeah, I really like how you talked about the dynamic nature of relationships on a team and that the communication style can change there when you have built that trust and you understand where another person is coming from. I was also thinking about the question of whose feedback are you interested in? And I certainly can remember times where I requested a review from someone in particular because maybe they had more context about this particular thing I was working on, and I wanted to make sure that I didn't miss anything, or someone else who maybe I had something to learn from them. And that is one way of making feedback work for me and being set up to receive it well. Because as much as...like you said, it's really easy to fall back into the argument of like, oh, what's the best way for the work, or what is the cleanest code or whatever? I am still a person who wrote it. I produced a piece of work and have feelings about it. And so I have really enjoyed just learning more about how I react to feedback and trying to mitigate the stress that I feel in what is kind of inherently like a conflict-generating process. NICOLE: Yeah, yeah, definitely. Another thing that kind of popped into my head to one of the earlier questions we were talking about is in terms of similarities between writing and engineering, style and structure are both really, really important. And even though in engineering, like you said, sometimes it can be, I mean, there is a point with engineering where you're like, this line of code works, or it doesn't. There is a degree of correctness [laughs] that you do have to meet, obviously. But again, after that, it can be personal preference. It's why we have linters that have certain styles or things like that to try to eliminate some of these more divisive, shall we say, potentially discussions around, [laughs] God forbid, tabs or spaces, naming conventions, all this stuff. But certainly, yeah, when it comes to structuring code, the style, or whatever else, like you said, there's a human lens to that. And so I think making sure that we are accounting for that in the process is really important, and not just whether or not the work gets done but also how the work gets done is really important. Because it predicts what do future projects...what does future collaboration look like? And again, you're not just ever optimizing for one thing in one point of time. You're always...you're building teams. You're building products. So there's a long kind of lifecycle to think about. STEPHANIE: For sure. So after you get feedback and after you go through the revision process, I'm curious what you think about the idea of what is good enough in the context of your writing. And then also, if that has influenced when you think a feature is done or the code is as good as you want it to be. NICOLE: Yeah, definitely. I think when it comes to my writing, how I think about what is good enough I think there is the kind of sentiment common in the writer community that you can edit yourself to death. You can revise forever if you wanted to. It's also kind of why I don't like to go back and read things I've already published because I'm always going to find something, you know, an errant comma or like, oh, man, I wish I had rephrased this here. But I do think that, for me, I think about a couple of questions that help me get a sense of is this in a good place to, you know, for me generally, it's just to start submitting to places for publication. So one of those is, has someone else read it? That is always a really big question, whether it's a trusted reader, if I brought it to a workshop, or just my writing group, making sure I have a set of outside eyes, fresh eyes on the piece to give their reaction. And again, truly as a reader, sometimes just as a reader, not even as a fellow writer, because I do think different audiences will take different things and provide different types of feedback. Another one is what kinds of changes am I making at this point in time? Am I still making really big structural edits? Or am I just kind of pushing words and commas around, and it feels like rearranging deck chairs on the Titanic? They're not massive changes to the piece. And then the final question is always, if this were published in its current state right now, would I be happy with it? Would I be proud of it? And that's a very gut feeling that I think only an individual can kind of feel for themselves. And sometimes it's like, no, I don't like the way, like, I know it's 95% there, but I don't like the way this ends or something else. Again, those are all useful signals for me about whether a piece is complete or ready for submission or anything like that. I think when it comes to engineering, I think there's a little bit less of the gut feeling, to be honest, because we have standards. We have processes in place generally on teams where it's like, is the feature working? Have you written tests? Have you written a QA plan if it needs one? If it's something that needs more extensive documentation or code comments or something like that, is that something you've done? Has a bit more of a clear runway for me in terms of figuring out when something is ready to be shown to others. But certainly, as a manager, I've written a lot more types of documents I suppose, or types of communication where it's like organizational changes. I've written team announcements. I've written celebration posts. I've had to deliver bad news. Like, those are all things that you don't think about necessarily. But I've definitely had literally, you know, I have Google Docs of drafts of like, I need to draft the Slack message. And even though it's just a Slack message, I will spend time trying to make sure I've credited all the right people, or provided all the context, got all the right answers. I run it by my director, my peers, and things like that if it's relevant. And again, I think there is still that piece that comes in of drafting, getting feedback, revising, and then feeling like, okay, have I done my due diligence here, and is it ready? That cycle is applicable in many, many situations. But yeah, I certainly think for direct IC work, it's probably a little bit more well-defined than some of the other processes. STEPHANIE: Yeah, that makes sense. I really liked what you said about noticing the difference between making big structural changes and little word adjustments. I think you called it pushing commas around or something like that. NICOLE: [laughs] Yeah. STEPHANIE: I love that. Because I do think that with programming, there is definitely a big part of it that's just going on the journey and exploring different avenues. And so if you do suddenly think of, oh, I just thought of a completely different way to write this code, that is worth exploring even if you just end up going back to the original implementation. But at least you saw that thought through, and you're like, okay, this doesn't work because of X, Y, and Z, and I'm choosing to go this other route instead. And I think that, yeah, that is just a good practice to explore. NICOLE: Another example of storytelling, too, where it's like, you can tell the story in the PR description or whatever, in stand-up, to be like, I also did go down this path, XYZ reason. Here's why it didn't work out, and here's what we're optimizing for. And there you go. So I do think we talk...I guess product managers think more about buy-in, but I think that's true of engineers too. It's like, how do you build consensus and provide context? And so yeah, I think what you were saying, too, even if the path is circuitous or you're exploring other avenues, talking to other people, and just exploring what's out there, it all adds up to kind of the final decision and might provide, again, some useful information for other people to understand how you arrived there and get on board with it. STEPHANIE: 100%. I remember when I worked with someone who we were writing a PR description together because we had paired on some code. And we had tried three different things. And he wrote paragraphs for each thing that we tried. And I was like, wow, I don't know if I would have done that on my own. But I just learned the value of doing that to, like you said, prime yourself for feedback as well, being like, I did try this, and this is what I thought. And other people can disagree with you, but then at least they have the information, right? NICOLE: Definitely. STEPHANIE: So before we wrap up, the last thing that I wanted to talk about, because I think it's super cool, is just how you have a totally separate hobby and skill and practice that you invest time and energy into that's not programming. And it's so refreshing for me to see you do that because I think, obviously, there's this false idea that programmers just code all the time in their free time, in their spare time, whatever. And I'm really curious about how writing fits into your life as something separate from your day job. NICOLE: Yes, I've been thinking about this a ton. I think a lot of people, the last couple of years has forced a really big reckoning about work and life and how much we're giving to work, the boundaries that can be blurred, how capitalism butts its head into hobbies, and how we monetize them, or everything is a side hustle. And, oh, you should have a page running...oh, you should charge for a newsletter. And I think there's obviously the side of we should value our labor, but also, I don't want everything in my life to be labor. [laughs] So I do think that is interesting. Writing to me, I actually do not see it as a hobby. I see it as another career of mine. I feel like I have two careers, but I have one job, [laughs] if that makes sense. I certainly have hobbies. But for me, what distinguishes that from my writing is that with hobbies, there's no expectation that you want to get better. You approach it with just...it's just pure enjoyment. And certainly, writing has part of that for me, but I have aspirations to publish. I love it when my work can reach readers and things like that. But I do think that regardless having other interests, like you said, outside engineering, outside technology, it's a great break. And I do think also in technology, in particular, I notice...I think we're getting away from it, but certainly, there's an expectation, like you said, that you will have side projects that you code in your free time, that you're on Hacker News. I think there is a little bit of that vibe in the tech industry that I don't see in other industries. You don't expect a teacher to want to teach in their free time, [laughs] you know what I mean? But we have almost that kind of implicit expectation of engineers to always be staying up to date on those things. I think with writing and engineering; the two complement each other in some interesting ways. And they make me appreciate things about the other craft or practice that I may not previously have. And I think that with engineering, it is a team effort. It's really collaborative, and I really love working in that space. But on the flip side, too, with writing, I do love, you know, there's the ego part of it. You don't have individual authorship over code necessarily unless it's git blame level. But there's a reason why it's called git blame, [laughter] even the word is like git blame. I've literally had cases where I'm like, oh, this thing is broken. Who wrote this? And then I was like, oh, surprise, it was you six years ago. But I do think with writing; it's an opportunity for me to really just explore and ask questions, and things don't have to be solved. It can just be play. And it is a place where I feel like everything that I accomplish is...obviously, I have people in my life who really support me, but it is a much more individual activity. So it is kind of the right-left brain piece. But I've been reading this book called "Saving Time." It is what my microphone is currently propped on. But it's by Jenny Odell, who wrote: "How to Do Nothing." It's breaking my brain in a really, really, really good way. It talks a lot about the origin of productivity, how we think about time, and how it is so tied to colonialism, and racism, and capitalism, and neoliberalism, all these things. I think it has been really interesting. And so thinking about boundaries between work and writing has been really, really helpful because I really love my job; I'm not only my job. And so I think having that clarity and then being like, well, what does that mean in terms of how I divide my time, how I set examples for others at work in terms of taking time off or leaving the office on time? And trying to make sure that I have a good emotional headspace so that I can transition to writing after work; all those things. I think it is really interesting. And that also, ultimately, it's we're not just our productivity either. And I think writing can be very, again, inherently kind of unproductive. People joke that cleaning is writing, doing the dishes is writing, taking a walk is writing, showering is writing, but it is true. I think that the art doesn't talk about efficiency. You can't, I think, make art always more efficient in the same way you can do with engineering. We don't have those same kinds of conversations. And I really like having that kind of distinction. Not that I don't like problem-solving with constraints and trade-offs and things like that, but I also really like that meandering quality of art and writing. So yeah, I've been thinking a lot more about collective time management, I guess, and what that means in terms of work, writing, and then yeah, hobbies and personal life. There are never enough hours in the day. But as this book is teaching me, again, maybe it's more about paradigm shifting and also collective policies we can be putting in place to help make that feeling go away. STEPHANIE: For sure. Thank you for that distinction between hobby and career. I really liked that because it's a very generative mindset. It's like a both...and... rather than an either...or... And yeah, I completely agree with you wanting to make your life expansive, like, have all of the things. I'm also a big fan of Jenny Odell. I plugged "How to Do Nothing" on another episode. I am excited to read her second book as well. NICOLE: I think you'll like it a lot. It's really excellent. She does such interesting things talking about ecology and geology and geographic time skills, which is really interesting that I don't know; it's nice to be reminded that we are small. [laughter] It's a book that kind of reminds you of your mortality in a good way, if that makes sense. But much like Gary on your porch reminds you of mortality too [laughs] and that you have to put Gary away for a little bit so that his time can come in October. [laughs] STEPHANIE: Exactly, exactly. Cool. On that note, let's wrap up. Thank you so much for being on the show, Nicole. NICOLE: Thank you so much for having me. This was a blast. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël has been integrating a third-party platform into a testing pipeline...and it has not been going well. Because it's not something she usually keeps up-to-date with, Stephanie is excited to learn about more of the open-source side of things in Ruby, what's new in the Ruby tooling world, and what folks are thinking about regarding the future of the language. Today's topic is inspired by an internal thoughtbot Slack thread about writing a custom matcher for Rspec. Stephanie and Joël contrast DSLs vs. Object APIs and also talk about: CanCanCan vs Pundit RSpec DSL When is a DSL helpful? Why not use both DSLs & Object APIs? Extensibility When does a DSL become a framework? This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. RubyKaigi 2023 (https://rubykaigi.org/2023/) Mystified by RSpec's DSL? by Jason Swett (https://www.codewithjason.com/mystified-rspecs-dsl-parentheses-can-add-clarity/) Building Custom RSpec Matchers with Regular Objects (https://thoughtbot.com/blog/building-custom-rspec-matchers-with-regular-objects) FactoryBot (https://github.com/thoughtbot/factory_bot) Writing a Domain-Specific Language in Ruby by Gabe Berke-Williams (https://thoughtbot.com/blog/writing-a-domain-specific-language-in-ruby) Capybara (https://teamcapybara.github.io/capybara/) Acceptance Tests at a Single Level of Abstraction (https://thoughtbot.com/blog/acceptance-tests-at-a-single-level-of-abstraction) CanCanCan (https://github.com/CanCanCommunity/cancancan) Pundit (https://www.capvidia.com/products/pundit) Discrete Math and Functional Programming (https://www.amazon.com/Discrete-Mathematics-Functional-Programming-VanDrunen/dp/1590282604) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a little bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I've been integrating a third-party platform into our testing pipeline for my client. It has not been going well. We've been struggling a little bit, mostly just because tests just kind of crash. Our testing pipeline is pretty complex. It's a lot of one script, some environment variables, does a few things, shells out to another script, which is in a different language. Does a few more things, shells out to another script, maybe calls out to rake, calls out to a shell script. There are four or five of these in a chain, and it's a bit of a mess. Somewhere along in there, something is not compatible with this third-party service that we're trying to integrate with. I was pairing this week with a colleague. And we were able to reproduce a situation where we were able to get a failure under some conditions and a success under other conditions. So these are basically, if we run the whole chain of scripts that call each other from the beginning, we know we get a failure. And if we skipped entirely the chain of scripts that set up things and then just manually try to invoke a third-party service, that works. And so now we know that there's something in between that's incompatible, and now it's just about narrowing things down. There are a few different approaches we could take. We could try to sort of work our way forward. We know a known point where it breaks and then just try to start the chain one step further and see where it fails. We could try to get fancy and do a binary search, like split it in half and then half and half again. We ended up doing it the other way, where we started at the end. We had our known good point and then just stepping one step back and saying, okay, now we introduce the last script in the chain. Does that work? Okay, that pass is great. Let's go one step further; two scripts up in the chain. And at some point, we find, okay, here's the one script that fails. Now, what is it within this script? And it was a really fun debugging session where we were just narrowing things down until we found the source of the bug. STEPHANIE: Wow, that sounds pretty complicated. It just seems like there are so many layers going on. And it was really challenging to pinpoint where the source of the issue was. JOËL: Definitely. I think all the layers made it really complicated. But having a process that we could follow and then kind of narrowing it down made it almost mechanical to figure out where the bug was once we got to a point where we had a known good point and a known bad point. STEPHANIE: Yeah, that makes sense. Kind of sounds like if you are using git bisect or something like that to narrow down the scope of where the issue could be. I'm curious because this is like a bunch of shell scripts and rake tasks or commands or whatever. What would have made this debugging process easier? JOËL: I think having fewer scripts in this chain. STEPHANIE: [laughs] That's fair. JOËL: We don't need so many scripts that call out to each other in different languages trying to share data via environment variables. So we've got a bit of a Rube Goldberg machine, and we're trying to patch in yet another piece in there. STEPHANIE: Yeah, that's really tough. I was curious if there was, I don't know, any logging or any other clues that you were getting along the way because I know from experience how painful it is to debug that kind of code. JOËL: It's interesting because I feel like normally logging is something that's really useful. In this particular case, we run into an exception at some point. So it's more of under what conditions does the exception happen? The important thing was to find that there is a point where it breaks, and there's a point where it doesn't, and realizing that if we ran some of these commands just directly without going through the whole pipeline, that things did work and that we were not triggering that exception. So all of a sudden, now that tells us, okay, something in our pipeline is wrong. And then we can just start narrowing things down. So yeah, adventures in debugging. Sometimes it's really frustrating, but then when you have a good process, and you find the bug, it's incredibly satisfying. STEPHANIE: I like that you used a process that can be applied to many different problems, in this particular case, debugging a testing pipeline. Maybe not something that we do every day, but certainly, it comes up, and now we have tools to address those kinds of issues as well. JOËL: So my week has been up and down with all of this debugging. What's been new in your world? STEPHANIE: I've been doing some travel planning because I'm going to RubyKaigi in Japan. JOËL: Whoa. STEPHANIE: This is actually going to be my first international conference, so I'm really looking forward to that. I just have never been compelled to travel abroad to go to a tech conference. But I'm really looking forward to going to RubyKaigi because now I've been to the U.S.-based conferences a few times. And I'm excited to see how things are different at an international conference and specifically a RubyKaigi because, obviously, there's a lot of really cool Ruby work happening over there in Japan. So I'm excited to learn about more of the open-source side of things of Ruby, what's new in the Ruby tooling world, and just what folks are thinking about in terms of the future of the language. That's not something I normally keep super up-to-date on. But I'm excited to be around people who do think and talk about these things a lot and maybe get some new insights into my own work. JOËL: Do you find that you tend to keep up more with some of the frameworks like Rails rather than the underlying language itself? STEPHANIE: Yeah, that's a good question. I do think because the framework changes a little more frequently, new releases are kind of more applicable to the work that I'm doing. Whereas language updates or upgrades are a little bit less top of mind for me because the point is that it doesn't have to change [laughs] all that much, and we can continue to work with things as expected and not be disrupted. So it is definitely like a whole new world for me, but I'm really looking forward to it. I think it will be really interesting and just kind of a whole other space to explore that I haven't really because I've usually been focused on more of the web development and industry work side of things. JOËL: What's a Ruby feature that either is coming out in the future or that came out in the last couple of releases that got you really excited? STEPHANIE: I think the conversation about typing in Ruby is something that has been on my radar but has also been ebbing and flowing over time. And I did see a few talks at RubyKaigi this year that are going to talk about how to introduce gradual typing in Ruby. And now that it has been out for a little bit and people have been using it, how people are feeling about it, pros and cons, and kind of where they're going to take it or not take it from there. JOËL: Have you done much TypeScript? STEPHANIE: I have been working more in TypeScript recently but did spend most of my front-end work coding days in JavaScript. And so that transition itself was pretty challenging for me where I suddenly felt a language that I did know pretty well. I was having to be in that...in somewhat of a beginner's mindset again. Even just reading the code itself, there were just so many new things to be looking at in terms of the syntax. And it was a difficult but ultimately pretty rewarding experience because the way I thought about JavaScript afterwards was much more refined, I think. JOËL: Types definitely, I think, change the way you think about code; at least, that's been my experience. STEPHANIE: Yeah, absolutely. I haven't gotten the pleasure to work with types in Ruby just yet, but I've just heard different experiences. And I'm excited to see what experts have to say about it. JOËL: That's the fun of going to a conference. STEPHANIE: Absolutely. So yeah, if any listeners are also headed to RubyKaigi, yeah, look out for me. JOËL: I was recently having a conversation with someone about the fact that a lot of languages provide ways to sort of embed many languages within them. So the Lisp family of languages are really big into macros and metaprogramming. Some other languages are big into giving you the ability to build your own ASTs or have really strong parsing capabilities so that you can produce your own, again, mini-language. And Ruby does this as well. It's pretty popular among the Ruby community to build DSLs, Domain-Specific Languages using some of Ruby's built-in abilities. But it seems to be a sort of universal need or at the very least a universal desire among programmers. Have you ever found yourself as a code author wanting to embed a sort of smaller language within your application? STEPHANIE: I don't think I have, to be honest. It's a very interesting question. Because I think the motivation to build your own mini-language using Ruby would have to be you'd have to have a really good reason for it, and in my experience, I haven't quite encountered that yet. Because, yeah, it seems like a lot of upfront work, a lot of overhead to introduce something like that, especially if it's not necessarily either a really, really particular domain that others might find a use for, or it just doesn't end up seeming worthwhile if I can just write regular, old Ruby code. JOËL: I think you're not alone. I think the Ruby community has been kind of a bit of a pendulum here where several years ago, everything that could be made into a DSL was. Now the pendulum kind of has been swinging the other way. And we see DSLs, but they're not quite as frequent. For those who maybe have not experienced a DSL or aren't quite familiar with the concept, how would you describe the idea? STEPHANIE: I think I would describe domain-specific languages as a bit of a mini-language that is created for a very particular problem space in mind to make development for that domain easier. Oftentimes, I've also kind of seen people describe the benefit of DSLs as being able to read that language as if it were plain English. And so, in my head, I have kind of, at least in the Ruby world, right? We see that a lot in different gems. RSpec, for example, has its own internal DSL, and many people really enjoy it because it took the domain of testing. And the way you write it kind of is how you might read or understand it in English. And so it's a bit easier to talk about what you're expecting in your tests. JOËL: Yeah, it's so high-level and minimal and domain-specific that it almost stops feeling like it's a programming language and can almost feel like it's a high-level configuration for this very particular domain, sometimes even to the point where the idea is that a non-programmer could read it and understand what's going on. STEPHANIE: I think RSpec is actually one of the first Ruby DSLs that you might encounter when you're learning Ruby for the first time. And I've definitely seen developers who are new to Ruby, you know, they're writing code, and they're like, okay, I'm ready to write a test now. And the project uses RSpec because that's what most of us use in our Rails applications. And then they see, like you said, almost a configuration language, and they are really confused. They're not really sure what they're reading. They struggle with the syntax a lot. And it ends up being a point of frustration when they're first starting out if they're not just copying and pasting other existing RSpec tests. I'm curious if you've seen that before. JOËL: I've definitely seen that. And it's a little bit ironic because oftentimes, an argument for DSL is that it makes things simpler that you don't even have to know Ruby; you can just write it. It's simpler. It's easier to write. It's easier to understand. And to a certain extent, maybe that's true. But for someone who does know Ruby and doesn't know your particular little domain language, now they're encountering something that they don't know. And they're having to learn it, and they're having to struggle with it. And it might behave a little bit weirdly compared to how Ruby normally works. And so sometimes it doesn't make it easier for adoption. But it does look really good in a README. STEPHANIE: That's totally fair. I think the other thing that's interesting about RSpec is that a lot of it is really just stylistic. I actually read a blog post by Jason Swett and the headline of it was "Mystified by RSpec's DSL? Some parentheses can add clarity." And he basically goes on to tell us that really RSpec is just leaning on some of Ruby's syntactic sugar of omitting parentheses for method calls. And if you just add the parentheses back in your it blocks or your describes, it can read a lot more like regular Ruby. And you might have a better time understanding what's going on when you realize that we're just passing our descriptors as arguments along with some blocks. JOËL: That's ironic given that oftentimes, the goal of these is to make it look like not Ruby. STEPHANIE: I agree; it is ironic. [laughs] MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: I think another drawback that I've seen with DSLs is that they oftentimes are more limited in their capabilities. So if the designer of the gem didn't explicitly think of your use case, then oftentimes, it can be really hard to extend or to support edge cases that are not specifically designed for that language in the way that plain Ruby is often much more flexible. STEPHANIE: Yeah, that's really interesting because when a gem does have some kind of DSL, a lot of effort probably went into making that the main interface that you would work with or you would use. And when that isn't working for your use case, the design of the underlying objects may or may not be helpful for the changes that you want to make. JOËL: I think it's interesting that you mentioned the underlying objects because those are often sort of not meant for public consumption when you're building a gem that's DSL forward. I think, in many cases, my ideal gem would make those underlying objects the primary interface and then maybe offer DSL as a kind of nice-to-have layer on top for those situations that maybe aren't as complex where writing things in the domain language might actually be quite nice. But keeping those underlying objects as the interface, it's nice to use and well-documented for the majority of people. STEPHANIE: Yeah, I like that too because then you can get the best of both worlds. So speaking of trying to make a DSL work for you, have you ever experienced having to kind of work around the DSL to get the functionality you were hoping to achieve? JOËL: So I think we're talking about the idea of having both a DSL and the underlying objects. And RSpec is a great example of this with their custom matchers. RSpec itself is a DSL, but then they also offer a DSL to allow you to create custom matchers. And it's not super well documented. I always forget how to define them, and so I oftentimes don't bother. It's just kind of too much of a pain for something that doesn't always provide that much value. But if it were easy, I would probably do it more. Eventually, I realized that you could use just regular Ruby objects as custom matchers. And they just seemed to respond to certain methods, just regular old objects and polymorphism. And all of a sudden, now I'm back into all of the tools and mechanisms that I am familiar with, like the back of my hand. I can write objects all day. I can TDD them. I can apply any patterns that I want to if I'm doing something really complicated. I can extract helpers. All of that works really well with the knowledge that I already have without having to sink a lot of time into trying to learn the built-in DSL. So, for the most part, now, when I define custom matchers, I'll often jump directly to creating a regular object and making it conform to the matcher interface rather than relying on the DSL for that. So once we go back to the test, now we're back in DSL land. Now we're no longer talking in terms of objects so much. We'll have some nice methods and they will all kind of read like English. So to pull a recent example that I worked on, I might say something like expect this policy object method to conform to this truth table. STEPHANIE: That's a really interesting example. It actually kind of sounds like it hits the sweet spot of what you were describing earlier in the sense that it has a really nice DSL, but also, you can create your own objects, and that has an interface that you can implement. And yes, have your cake and eat it too. [laughs] But the idea that then you're kind of converting it back to the DSL because that is just what we know, and it has become so normalized. I was talking earlier about okay; when is a DSL worthwhile? When is the use case a good reason to implement it? And especially for gems that I think that are really popular that we as a Ruby community have collectively used most of the time on our projects because we have oftentimes a lot of the same problems that we're solving. It seems like this has become its own shared language, right? JOËL: Yeah, there are definitely some DSLs that we all end up learning because they're just so prominent in the Ruby community, even Rails itself ships with several built-in DSLs. STEPHANIE: Yeah, absolutely. FactoryBot is another one, too. It is a gem by thoughtbot. And actually, in preparation to talk about DSLs with you today, I scoured our blog and found a really great blog post, "Writing a Domain-Specific Language in Ruby" by Gabe Berke-Williams. And it is basically like, here's how to write something like FactoryBot and creating your own little mini Ruby DSL for something that would be very similar to what FactoryBot does for fixtures. JOËL: That's a great resource, and we'll make sure to link that in the show notes. We've been talking about some of the limitations of DSLs or some aspects of them maybe that we personally don't like. What are maybe examples of DSLs that you do enjoy working with? STEPHANIE: Yeah, I have an example for this one. I really enjoy using Capybara's DSL for acceptance testing. I did have to go down the route of writing some custom selectors for...I just had some HTML elements within kind of a complicated table and was trying to figure out how to write some selectors so that I could write the test as if it were in, you know, quote, unquote, "plain English" like, within this table, expect some value. And that was an interesting journey. But I think that it really helped me have a better understanding of accessibility of just the underlying building blocks of the page that I was working with. And, yeah, I really appreciate being able to read those tests from a user perspective and kind of know exactly what they're doing when they're interacting with this virtual browser without having to run it in headful mode and see it for myself. JOËL: It's always great when a DSL can give you that experience of abstracting enough to where it makes the code delightful to work with while also not having too high a cost to learn or being too restrictive in what it allows you to do. Would you make a difference between something that's a DSL versus maybe just code that's written at a higher level of abstraction? So maybe to get back to your example with Capybara, it's really nice to have these nice custom matchers and all of these things to work with HTML pages. If I'm writing, let's say, a helper method at the bottom of a test, I don't think that feels quite like it's a DSL yet. But it's definitely a higher level than specifying CSS selectors. So would you make a difference between those two things? STEPHANIE: That's a good question. I think it's one of those you know it when you see it kind of questions because it just depends on the amount of abstraction, like you mentioned, and maybe even metaprogramming. That takes something from the core language to morph into what you could qualify as a separate language. What do you think about this? JOËL: Yeah, part of me almost wonders if this exists kind of on a continuum, and the boundary might be a little bit fuzzy. I think there might be some other qualifications that come with it as well. Even though DSLs are typically higher-level helpers, it's usually more than just that. There are also sort of slightly different semantics in the way that you would tend to use them to the point where while they may be just Ruby methods, we don't use them like Ruby methods, and even to the point that we don't think of them as Ruby methods. To go back to that article you mentioned from Jason, where just reminding people, hey, if you put params on this, all of a sudden, it helps you remember, oh, it's just a Ruby method instead of being like, oh, this is a language keyword or something. STEPHANIE: Yeah, I wonder if there's also something to the idea of domain specificity where it should be self-service within the domain that you're working. And then it has limitations once you are trying to do something separate from the domain. JOËL: Right, it's an element of focus to this. And I think it's probably also a language is not just one helper; it's a collection typically. So it's probably a series of high-level helpers, potentially. They might not be methods, even though that is ultimately one of the primary interfaces we use to run code in Ruby. So it's a collection of methods that are high-level, but the collection itself is focused. And oftentimes, they're meant to be used in a way where it's not just a traditional method call. STEPHANIE: Right. There's some amount of you bringing to the table your own use case in how you use those methods. JOËL: Yeah, so it might be mimicking a language keyword. It might be mimicking the idea of a configuration. We see that a little bit with ActiveRecord and some of the, let's say, the association and validation APIs. Those kind of feel like, yes, they're embedded in a class, but they feel like either keywords or even just straight-up configuration where you set key-value pairs of things to configure how a particular class is going to work. STEPHANIE: Yeah, that's true for a lot of things in Rails, too, if we're talking about routes and initializers as well. JOËL: So I've complained about some things I don't like about DSLs. I really like the routing DSL in Rails. STEPHANIE: Why is that? JOËL: I think it's very compact and readable. And that's an element that's really nice about DSLs is that it can make things feel very readable and, oftentimes, we read code more often than we write it. And routes have...I was going to say fewer edge cases, but I have seen some really gnarly route files that are pretty awful to work with, especially if you're mostly writing RESTful controllers, and I would recommend that people do. It's really nice to just be able to skim through a route file and be like, oh, these are the resources in my app and the actions I can do on each resource. And here are the ones that are nested. STEPHANIE: Yeah, it almost sounds like a DSL can provide guardrails towards the recommended way of tackling that particular domain. The routes DSL really discourages you from doing anything too complicated because they are encouraging you to follow the Rails convention. And so I think that goes back to the specificity piece of if you've written a DSL, it's because you've thought very deeply about this particular domain and how common problems show up and how you would want people to be empowered by the language rather than inhibited by it. JOËL: I think, thinking more about that, the word that comes to mind is declarative. When you read code that's written with DSLs, typically, it's very declarative. It's more just describing a thing as opposed to either procedural, a series of commands to do, or even OO, where you're composing objects and sending messages to each other. And so problems that lend themselves to being implemented through more descriptive and declarative approaches probably are really good candidates for a DSL. STEPHANIE: Yeah, I like that a lot because when we talk about domains, we're not necessarily talking about a business domain, which is kind of the other way that some folks think about that word. We're talking about a problem space. And the idea of the language being declarative to describe the problem space makes a lot of sense to me because you want it to be flexible enough for different use cases but all within the idea of testing or browser navigation or whatever. JOËL: Yeah. I feel like there's a lot of... there are probably more problems that can be converted to declarative solutions than might initially kind of strike you. Sometimes the problem isn't quite as bounded. And so when you want customizations that are not supported by your DSL, then it kind of falls apart. So I think a classic situation that might feel like something declarative is authorization. Authorization are a series of rules for who can access what, and it would seem like this is a great case for a DSL. Wouldn't it be great to have just one file you can just kind of skim, and we can just see all of the access rules? Access rules that are basically asking to be done declaratively. And we have gems like that. The original CanCan gem and then the successor CanCanCan are trying to follow that approach. Have you used either of those gems? STEPHANIE: I did use the CanCanCan gem a while ago. JOËL: What was your experience with that style of authorization? STEPHANIE: It has been a while but I do remember having to check that original file of like all the different authorizations kind of repeatedly coming back to it to remember, okay, for this rule, what should be allowed to happen here? JOËL: So I think that's definitely one of the benefits is that you have all of your rules stored in one place, and you can kind of scan through the list. My experience, though, is that in practice, it often kind of balloons up and has all of these edge cases in it. And in some earlier versions, I don't know if that's still a problem today, it could even be difficult to accomplish certain things. If you're going to say that access to this particular object depends not on properties of that object itself but on some custom join or association or something like that, that could be really clunky to do or sometimes impossible depending on how esoteric it is or if there's some really complex custom logic to do. And once you're doing something like that, you don't really want to have that logic in your...in this case, it would be the abilities file but inside because that's not really something you express via the DSL anymore. Now you're dropping into OO or procedural world. STEPHANIE: Right. It seems a bit far removed from where we do actually care about the different abilities, especially for one-off cases. JOËL: That is interesting because I feel like there's a bit of a read-versus write-situation happening there as well. It's particularly nice to have, I think, everything in one abilities file for reading and for auditing. I've definitely been in code where there's like three or four ways to authorize, and they're all being used inconsistently, and that's not nice at all. On the other hand, it can be hard with DSL sometimes to customize or to go beyond the rules that are built in. In the case of authorization, you've effectively built a little mini-rules engine. And if you don't have a good way for people to add custom rules without just embedding procedural code into your abilities file, it's going to quickly get out of hand. STEPHANIE: Yeah, that makes sense. On the topic of authorization, you did mention an example earlier when you were writing a policy object. JOËL: I've generally found that that's been my go-to pattern for authorization. I enjoy the Pundit gem that provides some kind of light scaffolding around working with policy objects, but it's a general pattern, and you can absolutely write your own. You don't need a gem for that. Now we're definitely not in the DSL world. We're not doing this declaratively. We're leaning very heavily on OO and saying we're just going to create objects. They talk to each other. They can do anything that any Ruby object can do and as simple or as complex as they need to be. So you have the full power of Ruby and all the patterns that you're used to using. The downside is it is a little bit harder to read and to kind of just audit what's happening in terms of permission because there's no high-level overview anymore. Now you've just got to look through a bunch of classes. So maybe that's the trade-off, flexibility, extensibility versus more declarative style and easy overview. STEPHANIE: That makes a lot of sense because we were talking earlier about guardrails. And because those boundaries do exist, that might not give us the flexibility we want compared to just writing regular Ruby objects. But yeah, we do get the benefit of, like you said, auditing, and at least if we don't try to do some really gnarly, custom stuff, [laughs] something that's easier to read and comprehend. JOËL: And, again, maybe that's where in the best of both worlds situation, you say, hey, I'm creating some form of rules engine, whether it's for describing routes, or authorization, permissions, or users can build custom business rules for a product or something like that. And it's all object-based under the hood. And then, we provide a DSL to make it nice to work with these rules. If a programmer using our gem wants to write a custom rule that just really extends what the ones we shipped can do, allow them to do that via the object API. We have all the objects available to you that underlie the DSL. Add more rules yourself. And then maybe those can be plugged back into the DSL like we saw with the RSpec and custom matchers. Or maybe you have to say, okay, if I have a custom rule object, now I have to just stay in the object space. And I think both of those solutions are okay. But now you've sort of kept those two worlds separate and still allowed people to extend. STEPHANIE: I like that as contributing to the language because language is never static. It changes over time. And that's a way that people can continue to evolve a language that may have been originally written at a certain time and place. JOËL: Moving on from DSLs, we got some listener feedback recently from James, who was listening to our episode on discrete math. And James really appreciated the episode and wanted to share a resource with us. This is the book "Discrete Math and Functional Programming" by Thomas VanDrunen. It's an introduction to discrete math as a theoretical concept taught side by side with the very practical aspect of learning to use the language standard ML, and both of those factor into each other. So you're kind of learning a little bit of theory and some practice, at the same time, getting to implement some discrete math concepts in standard ML to get a feel for them. Yeah, I've not read this book, but I love the concept of pairing a theoretical piece and a practical piece. So I'll drop a link to it in the show notes as well. Thank you, James. STEPHANIE: Yeah, thanks, James. And I guess this is just a little reminder that if our listeners have any feedback or questions they want to write in about, you can reach us at hosts@bikeshed.fm. JOËL: On that note. Shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
It's gardening season! Stephanie swaps seeds with friends and talks about her Chicago garden. Joël recently started experimenting with a dedicated bookmark manager. They discuss the aspirational (and sometimes dogmatic) sides of TDD and explore when to test: first or after. How does that affect the tests? How does that affect the code? How does that affect workflow? Are you a "better" programmer because you 100% TDD? This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Cassidy William's Productivity tools (https://dev.to/cassidoo/the-productivity-apps-i-use-in-2023-3m8l) raindrop.io Bookmark Manager (https://raindrop.io/) Simplifying Tests by Extracting Side-Effects (https://thoughtbot.com/blog/simplify-tests-by-extracting-side-effects) Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what is new in your world? STEPHANIE: It's gardening season here in Chicago. So right now, it is like mid-April as we're recording this, and we are just starting to get some warm weather. And this is usually the time that I do my garden planning for the season. And the other week, I went over to a friend's place, and we did a bit of a seed share. So we just each have collected fruit and vegetable seeds and herbs and all that. And a really fun way to collect more things to grow is to share with your friends. Seeds are super cheap, but I feel like you could just have like an infinite amount for all of the things that you might want to grow. And so it's really nice to be able to, yes, spread that gardening love around and share with your friends. JOËL: I'm imagining something like people trading collectible trading cards but the plant version. STEPHANIE: Yeah, exactly. The fun thing that we did, my friend and I, because, you know, you usually get a little envelope with between 10 and 50 or more seeds, and they're super tiny. Some of them are really teeny tiny, like with broccoli, for example, it's like I can't even explain. It's less than a millimeter, I swear. It's very easy to just lose them, so you want to keep them contained. But because we are sharing, we don't have a second envelope for the other person to take home with them. And so we actually made our own little envelopes with some origami paper that she had. And we folded it and stapled it and made it very cute. And so I came home with a bunch of these very adorable handmade envelopes with all of my new seeds. JOËL: Are you mostly doing vegetables, or are these flowers? STEPHANIE: Yeah, so we mostly focus on vegetables for our garden. And we do like to sprinkle some flower seeds in our yard. But that is more just like throw some seeds out there, and whatever happens to them happens. But with the vegetables, we put a little bit more effort because we usually try to have a good yield. So in past years, that has meant starting seeds indoors because, in Chicago, we have a shorter growing season than some warmer climate places. And the late summer vegetables like tomatoes, peppers those usually take a little bit longer. So if you want to get a good yield, you might want to start them inside a little early before it's warm enough for them to go outside. JOËL: So, do you have a garden plot out in your yard, or do you have a community garden plot? How does that work? STEPHANIE: I am really grateful to have a bit of backyard space. And we have three raised beds that we built that cover...I think each one is 3 feet by 10 feet, so quite a good amount of space. Yeah, we're able to grow a lot of food. Our highlights include shishito peppers. That's one that I really like to grow myself a lot because I usually don't see them in stores as frequently. We grow really great eggplants. Tomatoes, obviously, is a pretty popular beginner-friendly vegetable plant. And we like to grow a lot because then we can process it all and can some of it so we can have nice tomato sauce that's homegrown year round. JOËL: Hmm, sounds delicious. Do you experiment with the different varieties? STEPHANIE: We do. That's also a way that the seed sharing is really helpful because maybe I'll get some varieties of certain vegetables like cucumbers or whatever, but maybe my friend has a different kind. And I think we try to do a mix of growing the varieties that we know we like and then experimenting with some ones that are new to us. JOËL: It's hard to beat fresh vegetables in the summer. STEPHANIE: Yeah. I'm very excited, especially because during the fall and winter seasons here in Chicago, our local food is a little less exciting. It still can be good, but it's been a lot of root vegetables and the like when we try to eat seasonally in the other season. So I'm really looking forward to stuff that's just juicy and fresh, and it's just one of my biggest joys during the summer. What about you, Joël, what's new in your world? JOËL: I've recently started experimenting with a dedicated bookmark manager. This is not because I have been to too many bookstores and have all the free bookmarks they give you. These are the digital bookmarks to websites, and I've been really bad at managing those. I mostly just memorize the keywords I need to Google to get access to that website, which is a terrible way of doing things. And then I've got a mix of a few different browsers, which I don't sync, and have a couple of bookmarks. I use a little bit of Pocket, which is a tool by Mozilla. It's all right, but the search capabilities are not very good. So sometimes I'll know it's in there, but I can't find it. STEPHANIE: I'm so glad you brought up this topic because I am in a similar boat where I read a lot of things on the internet and have just thrown them all into my top-level bookmarks hierarchy. And that has not really been working for me, either. So I'm really curious to find out how you've been solving this problem. JOËL: So recently, I volunteered to be a mentor for first-time speakers at the upcoming RailsConf in Atlanta. And someone was asking me about designing slides, and we were talking a little bit about when should you use maybe a bulleted list on a slide versus when there are other options available. I knew that I had read years ago a fantastic resource on slide design. But try as I could, I could not Google this and get the page that I was looking for. This was shared to me by somebody else as part of a conference preparation group years ago, and so I reached out to this person. I was like, "Hey, so do you happen to remember that link you shared with me five years ago?" And this person says, "I do remember it. I don't have the link either." STEPHANIE: I've literally been in this exact same situation where I remembered that there was an article that I read, and I remembered exactly who shared it with me or who I talked about it with, and when I couldn't find it, trying to reach out to them and also not being able to find it through them. JOËL: So the story ends well because I was able to log into an old Slack group... STEPHANIE: Wow. JOËL: That had been created for the speakers at this conference and dig through the history. And luckily, I still had access to the group. I was still in that private channel for the speakers. And I found the link, and I was able to share it with others. So that was great. But then I started thinking; I can't keep living this way. I need something better. STEPHANIE: It's true. Even though we are expert Googlers as developers, sometimes the search just doesn't get you the thing you're looking for. JOËL: So, about this time, I'm scrolling Twitter as one does. And I saw a tweet from Cassidy Williams talking about some of the productivity tools that she's been using this year did a longer article about it. And I started reading it, and a tool that she mentioned there is Raindrop.io, which is an all-in-one bookmark manager. And I'm like, oh, that is exactly, I think, the missing piece of technology in my life right now. So I went up and signed up for it, and so far, it's been pretty good. I'm experimenting with it. But I've consolidated a lot of the links that were in my head or in some of these other places, put it in there, categorized them a little bit, tagged them. And hopefully, this becomes a better way so that when I want to reference a link for someone else either in a conversation or as a resource or even for myself, maybe when I'm writing an article, I'm like, oh, I know I read something that would act as a good resource here. I can go to Raindrop and get that article without any of these other shenanigans I had to do this time. STEPHANIE: Amazing. What is special about Raindrop as opposed to just your native browser bookmark capabilities? JOËL: It has some deeper structuring capabilities in terms of not everything has to be hierarchical. It has tags as well as categories. And I think most importantly, for me, it has search, which seems to be pretty good at surfacing things. It also has some somewhat smart capabilities where it will automatically figure out if the thing that you've linked is an article, or a document, or a video, something like that. So you can filter by these inferred types as well. It has the ability to sync across devices, which browsers can do if you're signed up for them. STEPHANIE: Nice. I like that it has that search functionality that you mentioned because I think I'm definitely in the boat of just scrolling through all of my untagged, unorganized bookmarks. And it's really tough to find what I'm looking for, especially if the meta title also doesn't quite tell me exactly the keywords that I'm needing to be scanning for in that moment. So I will definitely have to give it a try. JOËL: I believe you can get full-text search if you pay for the premium version (I'm currently trying the free version.), which in theory, could mean that it searches the contents of the article. It's not clear with that. But I do know they save a snapshot of the text of the article. STEPHANIE: That's really interesting because then it's almost like a search engine but scoped to the things that you have saved. JOËL: Yes. STEPHANIE: Nice. JOËL: I'll see how that goes, and maybe six months from now, I can talk a little bit about what the experience has been using that. STEPHANIE: Yeah, six months from now, you can tell us all about how you have no issues or qualms with how you've been managing bookmarks because everything is working perfectly well for you. [laughs] JOËL: JK, I've dropped this whole bookmark thing. STEPHANIE: That's true. That's also the flip side of trying out a new tool, [laughs], isn't it? MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! STEPHANIE: So our topic for today is something that we've had in our topic backlog for a while, and I'm excited to talk about it. It's TDD, which I think is a very well-known, potentially controversial topic of discussion in the world of software development. And specifically, we wanted to talk about when TDD is useful and when you actually might also have some value in writing tests afterwards. And in preparation for this topic today, I actually have been TDDing most of my client work this week. JOËL: What? You're telling me you don't TDD 100% of the time? Are you even a real developer? STEPHANIE: I am a real developer, and I do not TDD 100% of the time. I'm just going to say it. It's on record. JOËL: You know what? Me too. STEPHANIE: Wow, I'm glad we could clear the air on that one. [laughs] JOËL: What percent of the time would you say that you do TDD? In this case, test first as opposed to maybe testing after you've written the code or maybe not testing at all. STEPHANIE: Hmm, that's an interesting question. A part of me wants to answer it in my ideal workflow terms. But I think that is less interesting than reality, which is I will usually at least try to test first if I'm feeling like I am up for it. So maybe the percentage is, I don't know, I really couldn't tell you, but I'm just going to throw out 40% of the time [laughs] because that seems pretty, I don't know, reasonable. Sometimes you wake up, and you're just like, I'm not going to do it today. [laughs] And other days, you wake up, and you're like, you know? It sounds like a fun exercise to do for this particular feature. So yeah, if I TDD 40% of the time, then I think maybe I write tests after another 40% or 50%. And then [laughs] I'm hesitant to say this on the air, but sometimes you code, and you don't write tests for it and would not recommend it for the majority of your work. But I'm just going to be real here that sometimes it happens. JOËL: It's always a trade-off in terms of the work you put in versus the value you're getting out of it. And sometimes, you get very little value out of a test. STEPHANIE: Yeah, that's real. It totally depends on what you're doing. JOËL: I think one thing that's interesting for us, because we're consultants, so we move from one project to another, is that some projects are set up in a way that they're very test friendly. It's easy to have a testing workflow with them. And then others are just incredibly painful to test because of the way the system has been architected. And I think a TDD purist would then tell us that this is a symptom of high coupling or other architectural problems; that's probably true. But also, you don't have time to re-architect the entire system, and so then it becomes a question of trade-offs. Can I test some things easily today? Can I refactor a few things that will make this local change somewhat easier to test? And then, where is it not worth the effort to make something testable? STEPHANIE: Yeah, I've definitely struggled with that, where a part of me wanted to test something very thoroughly or even do test-driven development and then ran into some obstacles along the way and having to be realistic about that effort. The other thing I was referring to around it depending is also the actual code you're working on. So maybe if you're just writing a script or something to automate some dev workflow, it's okay for that not to be tested. And I also do think that the decision to TDD is very dependent on whether you are writing net new code, or refactoring, or having to deal with legacy code. JOËL: That definitely makes a difference. For me, when I'm refactoring in the purest sense, changing structure without changing behavior, in theory, I should not be writing tests for that because there should already be existing tests, and I'm not changing behaviors. So the test suite should prove that my changes did not change behavior. In practice, oftentimes, there is not the coverage that needs to be there. I don't know about you; I feel like I often don't trust the code enough, where I'm a little bit scared to do a refactor if there isn't test coverage. How about you? STEPHANIE: I've been running into that issue a lot on my current client project where I've been making an intentional effort to add test coverage before I make any changes because that forces me to really understand how things work because either I read a piece of code and I just can't tell at all. Or I learn later on that I thought I understood something based on the class or the method names, but it turns out that there was actually some nuance in there or side effects or what have you that belied my understanding [laughs] of what it was doing. And after a few times of that lack of trust that you talked about popping up, I was like, okay, I think, at least for me, the way that I can feel good about the work that I'm doing is to set myself up for success in that way. JOËL: Do you ever find that the code that you write in a test-driven approach tends to end up different than code that you might write with a test-after approach? STEPHANIE: Yeah, I think this can actually be answered at a few different levels but let me start with talking about how I like to practice TDD. If I'm given a user story, I usually try to work outside in. So I will write a feature or acceptance test and that involves testing how the user would interact with our application. At that point, I will usually go with the most naive implementation to get the test passing, and so it probably won't look pretty. In a recent case, I was adding a new parameter to a controller, and I just put everything in the controller to get the test green. [laughs] And then, at that point, is when I gave that code a second pass and looked for areas to extract where I could. JOËL: That refactor step and the red, green refactor cycle is really important. STEPHANIE: Yeah, absolutely. I think that is where I find TDD to be the most valuable from that higher-level perspective. And I know that there are different schools of thought on this. But that helps ensure that at least I have written the code to make the feature work the way that I was hoping. And I use TDD less for driving design decisions just because I like to have something to react to that is helpful for me rather than having a blank slate of, okay, let me write a test with an idea about how an object's interface will look. And so that's what works for me. So I do think it's kind of a mix of like from an acceptance test level; I am at least writing code that I know works, but the shape of the code for me is less determined by how I test. JOËL: So when you're looking at code that you've written six months down the line, you generally can't tell the difference whether it was test-driven or written first and tested after. STEPHANIE: That sounds right. That's just how my process works. In fact, I think recently we, to go on a quick tangent, we talked about writing conference talks, and I think I even mentioned for me the process is looking at the thing and then revising. And I think that the design driving element of TDD that a lot of people like is a bit less effective for me personally. JOËL: Hmm. Would you say that TDD does not impact the shape of the code that you end up creating in response to the tests? Or when you're talking about design, are you mostly thinking in terms of the interface that you would have in the test itself, like, what arguments the constructor takes or things like that? STEPHANIE: I think I was talking more about the latter, the interface, the construction arguments. When I do test afterwards, I also will notice the way the setup of my test how that is feeling. And if it is feeling a bit unwieldy or is a bit complicated, that will cue me to maybe take another pass at the code itself. So that's actually one way that testing after can signal to me a way that I might want to change my code. JOËL: Okay, so you're getting some of those pressures that you get from testing, but you respond to them in a like second path? STEPHANIE: Yeah, I think so. I'm curious how you TDD and whether you notice changes in how your code looks. JOËL: I think there are a couple of things that TDD does in my workflow that are really nice. One is it keeps me focused in terms of getting the work done because you're just following from one failure to another. It also keeps me focused in terms of scope. It's really easy for my engineering brain to be like, oh, we could totally do this thing and all that, and it's like, no, that's not needed to solve the problem at hand. Because in TDD, you try the smallest solution that will solve your problem, and then you will refactor it to make it maybe nicer to work with. But you try not to add new behavior that's not required in order to pass the test, and that can be a really helpful forcing function for me. STEPHANIE: That's interesting because I was just thinking about how sometimes, at least with the outside-in approach that I was talking about, I will find that the scope of the ticket is too big as I make changes to get the desired quality of the code that I want. Like I mentioned, the naive implementation, like, sure, maybe everything is in a controller, but as soon as I'm starting to do that second pass, and I want to maybe change another class and to make it work for my needs, I will notice it start to sprawl a little bit. And that is usually a signal to me that, like, oh, maybe what I need first is just refactoring the objects that I'm hoping to use to get the desired implementation. And that ends up being a separate PR that I do first to then set myself up for making the change. JOËL: The classic make the change easy before you then go and make the easy change. STEPHANIE: Right. But that does mean that that initial feature test that I wrote won't ever be green. So I do have to kind of like back out of making that change and just be like, okay, today is not the day [laughs] that I'm going to get this feature working. JOËL: There are some times where I'm in a situation like that, and I will kind of recognize, oh, there's a refactor step that's happening right now as a sort of subtask. And so, I will make that refactor change that I need to and then commit only those files that were a part of that refactor and may be included as part of the PR with the feature change or maybe push it up and make it its own PR. But depending on what the refactor is, oftentimes, I can kind of do it sort of all more or less continuously but decide once I've done that refactor step, okay, commit time but only those files for the smaller set of changes, and then keep moving with that outside-in approach. One thing I have noticed about the style of code that I tend to produce when I TDD versus when I don't is how I will tend to decouple things. And so because coupled code is really annoying to test in isolation, TDD sort of forces me to do more dependency injection, passing objects to others. It will often force me or maybe not force me, but it gives me that wholesome pressure to maybe separate HTTP requests from more of the business logic in my code, which otherwise I might completely intermix because it's just so convenient. Even certain things like class methods, I might tend to overuse them or use them more if I'm not test driving than if I were. STEPHANIE: When you talk about coupling, I'm curious, do you end up mocking a lot in the tests that you are writing to drive your development? JOËL: No, but if I'm testing after, I probably will. Mocking, I think, is a sign of coupling generally. In tests where you're just passing objects to each other, generally, you can get away with passing in a test double or something, whereas if you're hard-coding dependencies, you often have to mock. STEPHANIE: Got it. That makes a lot more sense now. I think that does require a bit of thought upfront about what kinds of objects you might need and what they would provide for you in the thing that you're testing. JOËL: Yes. There's definitely a phase where let's say; I'm testing some kind of third-party integration; I'm just kind of trying to do it all in one object that has a mix of business logic and some HTTP request stuff. It gets really annoying as we're adding...maybe the first feature is okay. I use WebMock, and I stub out a request, and it's good. And then the second one, I feel like I'm kind of duplicating that. And then the third one, I've got to deal with retries. So now I've got to go back to the first one and add some two or three WebMocks because now we've got exponential backoff code that's happening here. And this new feature broke the old tests. And it just becomes this really annoying thing to do. And then I might start thinking, okay, how do I separate these two things? I have one place where I test the HTTP logic, the exponential backoff, the what to do if I get a 404 from the API. And then, separately, I can just have the business logic and test all of those branches there without having to touch any of the HTTP stuff. I think you could get there from a few different paths. So you could get there by sort of following a lot of classic design principles, things like SOLID, because they kind of converge on that general idea as well. You could even get there if you took more of a functional programming approach where you are really good at separating side-effectful code from, I'm going to use the term loosely here, pure functions. I've heard some people make the distinction between IO versus non-IO in code and how that affects the types of tests that you write for them. And separating those two is a thing that you might do, even if you weren't writing tests at all, if that's a design principle that you know to follow. STEPHANIE: Yeah, that's a great point. I was thinking, as you were talking about your approach for handling that potential feature with talking to a third party, that I've heard that particular task or problem in software development used as an example for a lot of those different techniques or strategies that you mentioned. And I suppose TDD really is just a tool, and it doesn't replace your experience or intuition. And earlier, when we were talking about times that you don't do TDD, I will have to say that if I am doing something that I've done many times before, I feel confident enough that I don't need to lean on that red, green refactor cycle. At that point, it's more muscle memory. And maybe I do forget a step along the way, but I have the experience to know how to debug that or to see the error and know exactly what it was that I did wrong. And in that case, I am tapping into something different than using TDD. JOËL: I think definitely, for a lot of things now, there are patterns that I have learned where even if I weren't TDDing, I might do a third-party integration using this pattern because I've done it via TDD enough to know that this is a structure that I find works very well in terms of the coupling of things. And then maybe if I want to fill in some tests afterwards, then I'll thank my past self that I'm using a pattern that plays nicely with that. One thing that I do notice happens sometimes is that when people add tests after the fact, they will add tests that are green but that don't necessarily fail if the code breaks. Have you ever seen that? STEPHANIE: I have seen that before. In fact, I just saw it recently where we had a false positive test. And I made a change expecting the test to fail, and it didn't, which is not great because the value that tests have are when they fail, you want to be alerted when something goes wrong. Just because they're green doesn't mean that everything works. It just means that they didn't detect a problem. And in this particular case, I don't know if the developer who wrote this test had TDDed or not. But I did notice that in the test, we were mocking a method, and that ended up being the cause of the false positive. JOËL: I'm always a little bit skeptical of mocks because I feel like I've seen so many either brittle tests or tests that will succeed all the time come out of mocks. I don't know if you've ever heard the term tautological test or a test that is a tautology. STEPHANIE: No, I haven't. What does that mean? JOËL: In its sort of most basic sense, it's a test that is always green no matter what the output is. Some people think of it more in terms of self-referential tests, like, oh, a thing equals itself, which, yes, it does, and those tend to be always green. But it's not always self-referential. It can be some other subtle ways. Typically this happens when mocking or specifically if you mock the system under test. It's very easy to write a test that is now going to always be green, no matter how the code changes. A fun fact about the word tautology is it comes from discrete math, which is the topic of my RailsConf talk. If you write out a truth table that shows all the possible inputs and whether or not something will be true or false, depending on what the inputs are, the output column is all true in a tautology, which tells you that no matter what the inputs are, you're going to get true out of that method or function or equation. And so, if this was a Boolean expression in Ruby, you could replace that by hardcoding true and get the same result. STEPHANIE: Yeah, that's what I was imagining, a function that just returns true. [laughs] JOËL: And that's effectively what you can accidentally write when you're creating a test that is a tautological test is one where you could have just replaced the entire thing with expect true to be true, and it would have the same effect. And, like you said, tests only have value when they fail. And a test that never fails has no value. So TDD has this red, green refactor cycle. I feel like you could probably come up with a cute slogan like that for a testing-after style. So maybe I guess you'd start off you write some code, then you write a test that theoretically passes for it. So you start green, but then you want to make sure you see that test fail, so you got to go red and then comment out the code or something. Then comment it back in to see that it goes back to green to make sure that not only does this test fail when the code is broken but also that bringing this test back is what makes it pass, which is an important distinction. So maybe it's a green, red, green, and then maybe refactor. Because one thing that I admired in the style that you were talking about earlier is that even when you test after, you include a refactor step. The test at the end is not the final step in your workflow. STEPHANIE: Yeah, that's a really good point. When you said green, red, green, I was thinking of a Christmas garland [laughs] or something like that. But yeah, I do think that stuff gets skipped sometimes. If you are testing after, you're backfilling tests for code you wrote, and at that point, you think you know how it will work, and so you're writing your tests kind of colored with that in mind. I like the injecting commenting something out or changing an input or something that you know should make the test fail, just so that you can confirm that you didn't just write a test that expects true to equal true or give you a false positive like that, then go back to green. And as you were saying that, it did make me think like, oh, well, that's like a whole extra step as opposed to TDD where we do just have red, green refactor. We don't have that extra step. But I think the effort is just like put in at a different point in time. JOËL: Agreed. It's important that you see the code fail and that you see it pass after the change. The order has changed a little bit, but those two kinds of core elements are present. Kind of by default, you have no choice when you're doing TDD. You have the ability to skip that if you're testing after, but ideally, you incorporate those in a robust test after workflow as well. STEPHANIE: Yeah. And I know I mentioned times when I've done something enough or used a pattern enough that maybe I'll just go ahead and implement it and then backfill with tests. And I also recognize that in those moments, I could have done something wrong, that there is some amount of wanting to check that the test failed. And I imagine there is some kind of balance to achieve there between the speed that you get by having that experience and knowing the direction you want to take things and applying a pattern that you've done a lot with being like, oh, we're all human, and sometimes we make mistakes. JOËL: In a situation where you feel like you're coding something that you've coded up 100 times before, you're very familiar with this. Do you find that a test after workflow is faster for you? STEPHANIE: Hmm, that's an interesting question. JOËL: Because I think that's often a motivation. It's like, I don't want to bother, like, I just have the idea. I know what to do. Let me just write that code and get it done. STEPHANIE: I think if I were introducing a new route or controller action or whatever, I don't need to go through the cycle of writing a test and it failing because I haven't added the action to the controller yet. It's like I know that that is the next logical step, and so maybe I might skip it there. But if I'm at the point where I'm working with business or domain logic, I think that's where is the value of test writing first because it's like, I passed the framework and passed my tools. And now, I'm working at working through the logic of the business problem itself. JOËL: So you're working in maybe slightly larger iterations of that red, green refactor cycle. STEPHANIE: Yeah, that's a good way to describe it. JOËL: I was recently working on a gem and tried to TDD it from scratch and went with micro iterations. And it was actually really fun, and there was a flow to it. And this is a greenfield side project. And it helped me stay focused. I think it did give me a decent design. I really enjoyed it. STEPHANIE: Nice. Was there something satisfying about seeing that green each time and kind of doing that bit of mechanical labor? And I can see how that can feel almost meditative. JOËL: Yes. And I think also because this was a problem that I didn't fully know how I was going to solve, TDD helped really focus me on solving sub-parts of that problem, things that I can hold in my head and solve in a minimalistic way and then iterate on. STEPHANIE: I like that a lot. You were using that technique, and that really helped for the task at hand, which was, in this case, a bit smaller in scope. I think the way you and I have been talking about TDD has been very realistic and very reasonable. And I'm curious what you think about people who kind of use it as the pinnacle of how you should write code. JOËL: I think that's really interesting because TDD is a really wonderful technique, and I wish more people used it. But it's kind of taken on a mystique of its own where if you do TDD or claim to do TDD 100% of the time, now, all of a sudden, you've put yourself on another level. And I think people even who choose for pragmatic reasons not to TDD all the time maybe feel a little bit of guilt or at least feel the need to explain themselves to other people to say, "Hey, I didn't TDD this here. Well, let me explain to you why that's okay, and I'm not a bad programmer." STEPHANIE: Yeah, I think we even alluded a little bit to that earlier in the show, and I could hear my hesitancy to be like, oh, I guess I'm going to say this and have all these people hear it. But I think that's a good point that it's okay for you not to do it 100% of the time. That doesn't make you any less of a programmer. Also, the way we've been talking about it also makes it sound like one of those things where it's like you do have to learn the rules before you can break them. And so there is value in learning it and doing it. And then you also, after having done it enough, know when you want to use it or when you don't. My advice for folks who haven't really done it before or don't quite see the value of it is just to try it and then decide for yourself. I think at the end of the day, we should all feel empowered to be able to decide how we work best. JOËL: It's also really valuable, I think, to maybe pair with someone who is really good at that and to get to see what their workflow is like. Oftentimes, there's almost a hump of getting into it where you are more productive without TDDing because you're not comfortable with the flow or with the techniques. And it takes a lot of expertise to get over that hump where maybe at the expert end of things, you are more productive with it. And on the less expert end, it just becomes a chore that takes up all of your time or ends up giving you results that aren't that great anyway. And so, how do you cross that chasm? STEPHANIE: Yeah, that's a really, really great point because, in some ways, when you first get started, it will feel slow. You are unlearning the ways that you have known to code before and trying to do it in a different way. And I really like your advice about trying to pair with someone who has expertise or has been practicing it for a long time. That was my first real introduction to it too. At this point, I had been a few years into my career and hadn't really tried it because it seemed very daunting, and seeing someone else verbalize their process and seeing their workflow was really helpful for me to get on board. JOËL: I think what I would like is for TDD to be a tool that is aspirational for a lot of people. If you're new to the technique and you've paired with somebody who's really good at it, and you see the flow that they have and be like, wow, that's really good. I would love to get that incorporated in the way that I work. Rather than a sort of measuring stick for how elite of a programmer you are. There's no sense in shaming people over the tools they use. STEPHANIE: Right. Because it should also be accessible, and if you make people feel bad about it, and then it's not accessible to folks. JOËL: On that note. Shall we wrap up? STEPHANIE: Yeah, let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
What you'll learn in this episode: Why Google's search results page is more important than your website homepage Why the most successful law firms are involved in their marketing, even when they hire an outside agency How a firm's intake process can make or break their SEO efforts Why content marketing today is about quality, not quantity Why consistent Google reviews are the key to ranking higher About Stephanie Chew: Stephanie Manor Chew is award-winning law firm analyst andDirector of Sales and Head of the Elite Sales Team at Digital Law Marketing. For the last 16 years, she has been helping clients build credibility and increase their visibility online through the full lifecycle of digital initiatives. From custom search engine marketing and social media positioning, to targeted content and online reputation management, she makes sure that DLM clients get what they need, when they need it. Additional Resources: Digital Law Marketing Website Stephanie's LinkedIn Digital Law Marketing Facebook Transcript: Gone are the days when you could simply outsource everything to an SEO agency and expect results. To rank on Google today, law firms must take an active role in overseeing and executing their marketing plan. Stephanie Chew, Director of Sales at Digital Law Marketing, finds that the company's most successful clients collaborate with them to achieve the best possible outcome. She joined the Law Firm Marketing Catalyst Podcast to talk about why content is no longer king; why a firm's intake process is the most important part of lead generation; and how consistent Google reviews can boost your SEO efforts. Read the episode transcript here. Sharon: Welcome to the Law Firm Marketing Catalyst Podcast. Today, my guest is Stephanie Chew. She is the Director of Sales at Digital Law Marketing, and she's speaking to us from Annapolis, Maryland. The company is headquartered in Nashville but is basically a virtual firm and works all over the country. Digital Law Marketing encompasses a wide range of digital aspects today, and no law firm can live without them. From SEO to PPC to social media, a law firm can make a case for each of them, especially when they work together. Today, Stephanie is going to educate us on what's new in digital law marketing, where we should start and what we can't live without. Stephanie, welcome to the program. Stephanie: Thank you so much for having me. I'm happy to be here. Sharon: Stephanie, tell us your background. How did you end up doing this? You didn't tell your mother this is what you wanted to do where you were little, I don't think. Stephanie: It's funny; I always wanted to be in advertising in some respects. I was just telling my daughter this the other night when we were watching the Super Bowl. Watching the Super Bowl with my father, I was always so fascinated by the ads, and I always knew I wanted to do something around advertising and marketing. After college, I started with Trader Publishing Company, which is now Dominion Enterprises. It has changed hands a couple of times, but it's basically selling advertising space to car dealers. Then it turned into apartment communities, like for-rent magazines, things of that nature, and then that led me over to the SEO world, the website world. Then I started working with law firms in 2009, and I've been here ever since. Sharon: That's a long time with law firms. I can relate. I wonder what would have happened if I had been in advertising when SEO started. I'm involved in SEO, but I thought advertising was my dream job and quickly found it wasn't. What would you say that lawyers have to do differently in digital marketing? Stephanie: They have to be a part of the partnership. In the first part of my career, we would come in and help firms and companies by putting ads in newspapers or books, and the firm or the business really didn't have to do much. Now the most successful firms out there are involved with their marketing, maybe not as much as we are, but they're a pretty big part of it. More than they ever have been. For instance, getting reviews is incredibly important now, so the firm has to work to get reviews. We can make a firm tell Google how amazing the firm is. We can create an amazing website with wonderful content, great SEO strategy, but if the firm isn't getting reviews, they're not going to get business. Now, more so than it's ever been, the firm has to be behind the digital focus and be a part of what their partners are doing to help them become successful online. Sharon: That's interesting, because when I read a review, the first thing I look at is, “Is this a legitimate review or is something the company wrote?” I hadn't thought about how involved lawyers have to be, how involved everybody has to be. It's not just something done in the back room. Stephanie: Right. The firms that are the most successful online, the lawyers are actually asking for those reviews directly themselves. We've seen firms where they've hired people to get reviews for them. They're never as successful as the actual attorney asking for that review themselves. So, asking for those reviews is one thing we always push our firms to do because, like you said, you look at those reviews to see if they're real or not. Most people look first at the newest reviews, the most recent review that was posted, and then they look at the lowest review. Those are the two categories that people care the most about. So, it's important for the firm to be involved just as much as the marketing company to make sure your reputation is good too. Sharon: Do you explain that from the very beginning, that they have to be involved? Stephanie: Yes, and we will only work with firms that will be involved. We're very lucky that we're exclusive, so we only work with one firm per practice area per geographic location. If a firm isn't a partner with us, there's only so much we can do for them. But having that partnership, we are the best in what do. We like working with the best firms. It creates the best partnership for everybody's success. But yes, it's very important that they're also a part of their own success up front. Sharon: When you say success, is that lead generation? Is it just what they're doing? Stephanie: Yes, lead generation. Our goal is to help firms become visible online organically. Our main focus is search engine optimization, which is organic placement on search engines. We do paid ads, and we're very good at doing paid ads as well, but it's that organic placement that you get the most return from. The more rankings these firms have on the search engines, the more phone calls they're going to get and then hopefully the more cases they get. It really does work that way. We can track a ranking on the search engines, and then we track their phone and work with them to hear how many cases they're getting, and it really does work in that direction. Sharon: Social media and the paid stuff aside, do you encourage lawyers to write articles? Does this help? Stephanie: With our clients, we handle all of the writing because there are couple of different ways you have to write. Number one, you have to write to make sure you're the voice of the firm and it makes sense. You're writing about cases you're looking to get, but you also have to make sure you're writing so the search engines can recognize you. For instance, a very popular search phrase right now is “near me,” like “car accident attorney near me,” “car accident lawyer near me,” “dentist near me,” “best optometrist near me.” It's making sure you get those “near me” keywords in your content, making sure your content includes questions and answers, because a lot of people are asking questions of the search engines. We do have firms that like to write themselves. Attorneys are wonderful writers, but if they're not writing so the search engines can recognize what they're saying, it's not going to help them become more visible when it comes to these search phrases. It's a balance. We do all the writing for our clients with their approval, but if somebody does want to write here and there, we encourage that. We would just help with massaging the SEO and the content. Sharon: Would you massage the SEO or the stuff that makes them go higher in the rankings? If they have a website already, would you say, “It's wonderful, but we can go in and do some things”? What do you do? Stephanie: 99% of the time, we rebuild and redesign and develop the website first. The reason we do that is because a lot of how your website is built is how you're going to perform on the search engines. For instance, if you have a very slow website, Google does not like that. Your site speed is a factor if you're going to rank or not. So, we like to go in and clean up the website so we have a good product to work with to then help with SEO. From there, we write content, build out the content, create site maps, really get to know the firm, their voice, and figure out the types of cases they're looking for. Then we write content around that to help them rank on the search engines. Sharon: Are you called in when they say, “We're about to embark on a rebuild of our website”? It seems to me they already have one when they call you in. Stephanie: Sometimes that happens, where we start working with a firm and they just rebuilt their website, and we have to give them the bad news of “I'm really sorry, but this website isn't going to perform.” We wouldn't take on that client because we want to set up the proper expectations of success for our clients. If you have a marketing company tell you, “Oh no, that's O.K. Your website's slow, but we could still work with it,” that would be a red flag because it won't work as well as it could if you redid the site. It happens sometimes. Sharon: Going back to the “near me,” I don't even enter that, but that comes up as a choice to click on. Stephanie: Yeah, that's usually right. Sharon: That's interesting. What do you mean by content writing? Is that what you mean when you're making sure the content— Stephanie: When it comes to content, you have the content pages on the website. Some of the most popular content pages on a law firm's website would be their practice area pages. You might have a page on wrongful death. You might have a page on car accidents. You might have a page on personal injury. Then each one of those pages includes content. The type of content on that page could be question and answer, could be including those words “near me.” Google pulls from that content to determine how you're going to rank based on the way the person is searching. You'll see a lot of times where Google does an instant answer. If they're asking a question, “what is the statute of limitations in the state of California for a wrongful death case,” a law firm's content page could answer that question, so they'll bring it up as the first result. There's also blogging. You want to make sure you're blogging on a regular basis. In the past, it was as much content as you could put on there. The phrase “content is king” is gone. That used to be the way we spoke when you would push content, push content, push content. Now, it's more about the quality of content versus the quantity of content. It's making sure it's good content that's enriched with the types of cases you're looking for, and written well so the search engines recognize you as an expert on that topic with experience and expertise in the discussion. Google will see that and help you rank better based on the content and what you're saying. Sharon: Is that per lawyer? Let's say on the home page of the website you have banners or badges that say, “We're the best.” Or is it in the bio? Stephanie: It would be in a practice area page. When somebody does a search for a car accident lawyer, let's say, Google wants to provide them with the most specific information they're looking for. So, they'll more likely pull up a car accident page from your website and show that over your home page. Your home page should be a summary of everything you do, and then the content pages are more specific on each practice area. When somebody does find you, they're going to find that practice page usually over your home page, but all of your content should include things that are easily identifiable for Google. Sharon: I always laugh when I see a bio that says they specialize in 20 different things, because how many can you specialize in? What would you do? Would you put everything the firm does? What would you do in order to come up? Stephanie: With a bio, you really want to focus on that attorney and what they've done and that's it. When it comes to the actual practice area pages, that's where you would focus on that practice area. Then maybe you could put in a little sentence or two about which attorney does that, if that makes sense. There are ways of doing it. It's not necessarily a right answer or a wrong answer. It depends on the firm, the market, the practice area. But there are ways you can incorporate that being specific to the attorney and what their expertise is versus what the whole firm does on the bio page, if that makes sense. Sharon: It does make sense. Should you put successes like, “We won a case that was really hard to win for $10,000 and John Smith did it”? Stephanie: Oh yeah, verdicts and settlements pages and verdicts and settlements in general are some of the most visited areas on the websites. People want to see numbers. There are some markets where they might not be allowed to put verdict and settlement numbers on their website, or the firm doesn't feel like it's appropriate to do that. But by the way, law firms that put their numbers on their websites get more attraction than the ones that don't. Sharon: The big question is do people choose a personal injury firm because they like the lawyer? It's a nice, touchy-feely firm versus one that's won all of these big numbers but they might not like as much. How do you choose? What's more important? Stephanie: That's a good question. Again, it comes back to the person choosing and what's important to them on why they're choosing, but if you don't have the big numbers, you definitely want to talk about what you've done. A lot of people want to feel that they can relate to that attorney. I always say talk as much as you can about things you've done to help other people. If I had a case that was specific and I read that that attorney has helped other people with the same thing I have, I'm more likely to work with them regardless of what the numbers are because I feel like they could help me. If you don't have those big numbers, you want to discuss what you've done because people will be able to relate to that. We're also big believers in putting personal information into those bios. Talk about your hobbies, talk about your children, because people relate to things. There are so many situations where I've heard that this attorney got a case because somebody saw they had the same hobby, they went rafting or whatever it was, and their son had passed away, or that they were calling him because he had the same alma mater. Obviously that is a big one people gravitate toward. Outside of politics—I would stay away from writing anything related to politics—the more information you can humanize yourself with, it's going to help people connect with you better and they'll end up hiring you. Sharon: That's interesting. I've heard that both ways. I tend to relate to people, so I would like to know more about them. That's interesting that you should put it in your bio. Are you usually called in the beginning or are they already underway? Why are you called in? Tell us about your business. That's several questions, sorry. Stephanie: That's O.K. Usually we're called in when a firm is looking to take their law firm to that next step and they're looking for more cases. They're not showing up online. They're not getting phone calls. They're not getting cases online. A lot of times, we're called in to firms that have worked with referrals for pretty much their whole law career. They're always getting referrals, and they're tired of paying those referral fees to other attorneys. They'd like to generate cases themselves from the internet. Then we would be brought in to help them analyze what's going on in their market and what their current web presence is. Then we can put together a plan to get them to where they need to be to generate more calls that generate the cases they're looking for. It's usually somebody that wants to make more money off the internet in some way, like they're tired of paying referral fees and/or they're looking for more visibility and better-quality cases. We hear that a lot; that we help firms create better-quality cases over anything else. Sharon: Better quality meaning larger cases, bigger numbers? Stephanie: It could be anything. It could be that it's a firm that did a bunch of slip and fall cases and now they're getting bigger and better quality personal injury cases. It's medical malpractice firms that used to get a lot of junk calls and now they're getting quality calls, things like that. We're really good at SEO, and we're really good at creating more rankings for somebody organically. Usually when somebody finds a firm organically, they tend to be better qualified, quality leads. Sharon: Do you keep your eye on the changes in the Google algorithm? Stephanie: Yeah, we have a SEO specialist that works with digital marketing. We're all senior level, too. I always like to mention that because our SEO specialists are also very recognized in their SEO space. We have one Google Product Expert that works for us. She's one of 50 in the world. She's outstanding. We also have a Google Local Search expert who's been nationally recognized. They're the ones that keep up with the trends and how things are changing, and then we push that down to all of our firms. We're constantly moving in different directions with content and with SEO strategies based on the changes in the Google algorithm and changes in how we as human beings search. It is ever-changing. If you looked back 10 years ago from today, it's totally different to what we're doing. Even a year ago, it's a different strategy than what we were doing. Sharon: That sort of leads me to the next question. When I search, you have to skip like 10 sponsored ads. Is it possible to be high organically? Stephanie: Absolutely. It's interesting because Google has put a lot of emphasis on their paid ads. They have a newer ad called the Local Services Ad. It's been around for two years now, but those are the ones where there are pictures at the top of the page. They're considered Google screened, but they're driven by reviews and making sure that somebody answers the phone and other things in your budget. But the biggest driver of those is how frequently you're getting reviews, which is interesting that Google is doing that. So, there are different types of advertising they're doing, and they're pulling in an organic element with those reviews. Below that you have your pay-per-click, which is the paid advertising for Google Ad Words, and then you have your local. But yes, local SEO is still the sweet spot of getting calls. The firms we see, the majority of the calls come in through that local SEO space. Sharon: When you say you only take one practice area and one geographic area, do you have a map divided up? What do you call a geographic area? Stephanie: It depends on the marketplace, but a lot of it has to do with where the office is located. For instance, we have a state where the firm has 10 office locations throughout the state. Well, they're the only personal injury firm in that state because they have so many offices, so we're not going to work with anybody else. It comes down to who their competitors are. Our whole thing is we're not going to work with your competition. If it's too close for comfort, we go to our clients first and have them tell us if it's O.K. if we work with them, yes or no based on the competition, and we will or we won't. We do not cross that line at all. We are 100% exclusive, and that's why. We only have a handful of clients per state because it's all we want. We don't want to be the biggest SEO company out there. We want to be the best, and we feel that we are. Sharon: What do you do if you're in a room of lawyers, whether it's partners or not, and they say, “Reviews aren't a problem. Sally in marketing handles the reviews”? What do you do then? Stephanie: It depends. Maybe Sally in marketing really does do a great job and she is getting multiple reviews a week. That would be awesome. We wouldn't have a problem with that at all. But if Sally in marketing hasn't gotten a review for six months, we can see that. We can say, “Oh, that's great, but the best thing for firms is to get consistent reviews on a regular basis. Two to three reviews a week would be ideal.” We can show that they're responding to them, that they're engaging with that list, and we really push that. We've had situations where we have gotten firms top ranked—I keep trying to say first page, but there are no pages anymore when it comes to Google. It's about rank. You can't even scroll. So, we could get somebody at the top of the rank of the search engine, but if their reviews aren't good, nobody's going to call them. We've done our job, but nobody's going to call you if your reviews aren't good. It's a two-way street. We coach our firms. We encourage them. We do a lot with intake. We can audit phone calls and help them figure out how people are handling their calls. It's a lot of coaching and encouraging and trying to do our best to get them to do their part, too. Sharon: I think you just preempted my next question. You can have wonderful numbers, but if they fill out the intake form and nobody sees it— Stephanie: Yeah, if they're not answering the phone. We see this a lot. We'll do audits with some of the most successful firms in lots of different situations. I'll never forget there was a catastrophic injury/medical malpractice firm, and a lady called very upset saying that her daughter was just diagnosed with cerebral palsy, and the woman's like, “I don't know if we do that. Hold on. Let me check. Yeah, we do that.” Now the confidence is shot. There's no way. These are not the people to hire. Intake is such a big part of these firms. It's probably the most important part that our lawyers aren't paying attention to right now. Not all our firms, but in our industry in general. We're doing a lot with our clients to help them with that, but in our industry as a whole, I feel like intake is probably the area that can be improved the most. Sharon: People don't talk about that enough, I think. They talk about how much money everybody is spending on SEO and organic, but not about when the calls come in, where they were sent or what happens. Stephanie: It's really a salesperson on that line if you think about it. As you said, firms are spending thousands and thousands, tens of thousands of dollars a month in marketing, but who's answering that phone? All your dollars are going out the window when you don't have the right person. They usually want to cut costs on those types of positions, when really it should be handled as a sales organization. Some of the more sophisticated PI firms, those large firms that are coming into different markets, are handling those as sales calls. It's changing. I've seen firms do a great job, but I do think that's one of the first things that is overlooked. Hopefully it's coming to light now. More firms are starting to do better at it, but you've got to take care of all the parts. Sharon: There are a lot of parts. I was laughing when you said content is king because that's what people used to say. There was a time, a long time ago, when you could tell somebody, “Just write a lot about what you do and you'll be O.K.,” but that's long gone. Stephanie: Yeah, it's gone now. Sharon: Would you say that a website is the hub of everything a person is doing when they're doing paid ads and SEO? Stephanie: I probably would have used to say that, but what I would say now is if you do a search for the firm's name on Google, that is the new homepage. Whatever you see that comes up there is what I would be more concerned about than even the homepage of your website. The reason I say that is because if you do a search—let's say you're a car accident lawyer and somebody finds you by doing a search for car accident lawyers. They are going to see your presence on Google pop up first. Sometimes they'll go directly to your website; sometimes they'll look at your reviews before even looking at your website; sometimes they'll look at where you are before doing that. There's a lot of information they can find out before even getting to your website. If somebody does a Google search of your firm name, on the right-hand side of that search is usually where you'll see the Google information and Google reviews, but on the left-hand side is all those other directories out there, which could have bad reviews. That shows up before somebody even gets to your homepage. It used to be that your website is the hub of everything. It's still incredibly important, and maybe it still is the hub, but when it comes to your reputation, you really need to see what Google has on your firm. What is your brand telling people before they even get to your website? What are all these directories saying? What are all these reviews saying about you? Sharon: What are you seeing with all the sponsored ads? I just happened to look at your website, and there are about five sponsored ads before you even get to yours. What do you do? Is that part of it? Stephanie: If you were to google Digital Law Marketing, there are other law marketing companies that will bid on our name to show up ahead of us. That happens. Or somebody could be bidding on digital marketing or terms like that, but people can see that they're sponsored or paid ads. You can see that right there. Most people, if they're looking for the real website, will pass those and go directly to the organic. Now, some people search differently. Some people would click on the first one they see, but users are becoming a lot more sophisticated than they ever have been, so they understand what an ad is. Sometimes ads are the best result. Google has also done a good job with the ad program so that sometimes the best information you're finding is in the ads. It depends, but it's hard to get away from those ads. One thing you could do as a business is bid on your name. For instance, we bid on Digital Law Marketing, so we're one of the first that pops up when somebody does type in our name. But you do want to make sure you're aware of what is on the internet about your brand. Sharon: It seems like the world has changed so much as a marketing person who's interested in everything you're talking about. For the firm to be at the top and on social media and everywhere, you need a bunch of experts. They need their own team. You can't be an expert in everything or just a lawyer who's interested in marketing. Stephanie: You're absolutely right. We touch on social media, but there's so much more you could be doing with social media. There are so many different avenues and elements of everything. You could have, like you said, a whole team. You hire a company like ours to manage the website, the SEO, the paid ads. Then you have somebody that does social media video, optimization and things of that nature. Then you get somebody that just does PR. PR companies and SEO companies work really well together because it creates good results when they do. There are so many different things. It's not just hiring one person and they can do everything. Sharon: But the marketing person or the lawyer who's interested should also be auditing calls or at least know what's happening. Stephanie: Yeah, and there are so many different tools now. We use something called dynamic call tracking where you can record every call. We're constantly spot checking and listening to our clients' calls to make sure the leads are being handled properly once we bring them to the law firm. If they don't, they're not going to see the success of their marketing dollars. Sharon: Have you ever had to make changes because of the dynamic call tracking? Stephanie: Yeah, we've had to. We've actually had to not renew agreements with clients. In almost 10 years with Digital Law Marketing, we've only lost a handful of clients, and two of those we actually let go ourselves. The reason we let them go is because they weren't helping themselves and they weren't helping to be a partner. At the end of the day, nobody would be successful. Lots of times we have these hard conversations with firms and say, “O.K., this what we found out. We did an audit and 40% of the calls aren't being answered.” The firms are very receptive to it, and they make changes quickly. That's why they hire us, because they know we'll help them with making those decisions. We've had lots of hard conversations with firms, but if firms aren't willing to help themselves, it's hard for us to help them. Sharon: I presume you've been in the position where you've come in to replace another SEO firm. Stephanie: Oh, yeah. Sharon: How long should a law firm wait to see results? Stephanie: Good question. We ask all of our clients at Digital Law Marketing to give us one year of SEO. After that, it's month to month. We don't renew clients because if you don't want to be with us after a year, then we're probably not the right fit. But we don't lose clients because we can show you within a year what we've been able to do for you. If it's not us, then try somebody else. I would definitely give it a year. Just yesterday, I had a call from somebody who was frustrated because their marketing company had been working for three months and the results weren't showing up. I'm like, “You really need to give them longer than three months. Give them a good year. I'm not going to say you're going to be at the height of your performance in a year, not at all, but you will see progression.” We tell people all the time, “We'll be able to show you in the first 90 to 120 days how you're ranking better, how you're getting more phone calls.” We continually show that progression because it takes years to get really good visibility on search engines. You're telling Google who you are over a long, consecutive period of time of building your brand, but you will see progression quickly. You're just not going to see ultimate results for some time. Sharon: You must have lot of people say, “A whole year? You want me to wait a whole year before I start to evaluate?” Stephanie: People have figured it out now. It used to be more of a challenge five years ago, but people have figured it out. SEO takes a while. With paid ads you can see a return a little quicker, but it's still not as quick as it used to be. With paid advertising, we tell everybody to give it at least three to four months. There are so many people that are doing paid advertising, so it takes a little longer. It used to be that you were able to see results in a day, but it's different the way things are working now. It just takes time, but if you're consistent and you're doing the right thing over a consistent period of time, you will see the right results with the right company. You have to make sure you trust who you're working with, too. Sharon: That's probably a big factor. One of the last questions, if you can tell us, is about how people find you. Do they only find you because of a web search, or do they find you other ways? How do they find you? Stephanie: The law firm? Sharon: Yeah, how do your clients find you, so they call you versus another company? Stephanie: They could do a web search and find us that way. We are Diamond Sponsors of the American Association for Justice, the AAJ. It's a national organization. We're also sponsors of the National Trial Lawyers. We do travel a couple of times a year to conventions and meet new firms. A lot of our clients come from other clients because our clients tell our story a lot better than anybody else. On our website, we have a bunch of FAQs and testimonials from our clients, but they can look us up on Google, social media and through our website. We have a form on there so we can do free SEO audits for firms. We'd love for them to fill that out and see if it's something we can help firms with. We are working with firms all over the country, but we do have markets available, so we'd love to hear from anybody that's interested in not having to hire a company again. A lot of times, people come to us and say, “I'm tired of switching companies every year or every two years.” Our clients don't have to do that anymore. So, come to us and you don't have to continually look further. Sharon: That's a big point of differentiation. For everybody listening, we'll make sure to have the website link and any other links. Thank you so much. We really appreciate it, Stephanie. Stephanie: Thank you for having me, Sharon. It was fun. Sharon: Thanks. Stephanie: Take care.
Stephanie has a win and a gripe from her client project this week. In a previous episode, Joël talked about his work exploring how to model dependent side effects, particularly D&D dice rolls. He went from the theoretical to the practical and wrote up a miniature D&D damage dice roll app that you put in a few inputs. Then it will roll all the dice necessary and tell you did you successfully hit your target and, if so, how much damage you did. Together, they discuss how they think about fulfillment at work and what brings them fulfillment as developers. Obsidian (https://obsidian.md/) Joël's DnD dice roll app production (https://dnd-damage-roller.netlify.app/) site and repo (https://github.com/JoelQ/dungeons-and-dragons-damage-calculator) Engineering Management for the Rest of Us (https://www.engmanagement.dev/) The Five Love Languages (https://www.psychologytoday.com/intl/blog/click-here-happiness/202009/what-are-the-5-love-languages-definition-and-examples) Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: So I have a win, I suppose, and a gripe from my client project this week that I would love to share. So my win is that I've been working in React lately. And I might have mentioned this on a previous episode, but it's been a few years for me. So I'm kind of catching up on the new, hot tooling, you know, whatever is popular in that world these days, and having to read a lot of documentation to figure out how to use it and just in general, I think being a little bit outside my comfort zone. And I was working on an existing React component that was untested, and I had to change and extend some functionality in it. And we're also a little bit on a deadline. So there's like a little bit of pressure on the team to be delivering. And so when I got this ticket, I was like, okay, I am seeing this existing component that looks also a few years outdated. It's using some of the older technology that we've kind of moved on from. And I was just like, oh, I really should write tests for this before I go in and change some things just to feel confident that my changes don't break anything because it was pretty gnarly. But I was not in the mood for it. [laughs] And this was like two or three days ago. I was just very grumpy. And I was like, oh man, why do I have to do it? [laughs] I kind of wanted to just get into making the changes so I could deliver on this work. So, spoiler, I did not write the tests that day and just kind of went ahead with the changes. But then, the next morning, I woke up, and I was feeling inspired. I was like, I made those changes, but I'm actually not feeling that confident about it. So let me go back and try to write some tests. And I got to use the new tools I had been looking into, and that was part of my hesitation too. I was like, oh man, this is like a really old component. And I don't want to use the older ones that we're using for testing. But how is it going to play with the newer testing tools that we're using? And so there was just like a lot of, I think, barriers to me feeling excited about writing those tests. But with my renewed energy, I did it. And I feel very happy about it and proud of myself. Yeah, that's my little win. JOËL: That's a roller coaster of a journey there. That sort of deception when you find out that there are no tests for this and somebody else's problem has kind of become your problem. But then you decide you don't want it to be your problem, you know, kick it down the road for somebody else. And then you feel good about yourself, and you decide to backfill the test anyway. And you get that confidence, and now everything's better for everybody. That is quite the journey. STEPHANIE: Exactly. I listened to another podcast recently where they coined this term called tantrum logic, which is basically the idea that when you're kind of grumpy or something happens, and you're like, man, I don't want to do any of this, like, if I can't do it my way, then I don't want to do it at all. [laughs] And just the idea that the way you're thinking about the issue at hand may not be totally grounded in reality. And I think I needed that reset and just a good night's sleep and going to do something else to come back and be like, actually, I do want to write those tests, even if it will be challenging. I'm in a better mind space for it. Mind space? Headspace? [laughs] Headspace for it. And I overcame the tantrum logic. JOËL: A good night's sleep is just such a powerful tool for resetting. STEPHANIE: Yeah, I agree. Shout out to sleep. [laughs] It turns out that it can really have a positive effect on how you feel. JOËL: By the way, this is not an advertisement. We are not sponsored by sleep. We just both love it and recommend it. STEPHANIE: [laughs] To get into my gripe a little bit, so you and I are on the same client project we've mentioned before on the show. And I think I even talked a little bit about receiving a new computer from our client to do our client work on. So now I have many devices at home. And we had also chatted previously about a note-taking app that we both use called Obsidian. And one of the reasons that I really like it is because it's all local storage. So your notes are not being uploaded to the cloud or whatever. But that does make it hard to use on multiple, I mean, not just hard, impossible to use [laughs] on multiple devices unless you pay for it. They have a sync offering where you can use it on multiple devices. And I think it's also encrypted in a certain way. Anyway, sometimes I'll be working on my client laptop and have some idea or thought that I really want to note down, but I don't have Obsidian installed on this machine, and it's not synced to my other Obsidian. And I have just been kind of annoyed about having to go open another computer to write a thought down if I want to document it. And I'm curious how you deal with this problem. JOËL: So the downside of Obsidian not being a cloud product is that you don't just get that sync for free. The upside of it just being markdown files on your hard drive is that you can use any other product or tool that you want to manipulate these files. So I have my Obsidian vault, which is just the term for the directory where it keeps all of these files in a Dropbox directory. And so I have it sync across multiple machines just by being signed into my Dropbox account. STEPHANIE: That's smart. And that sync is pretty smooth for you? You don't have any issues with updating it in one spot and seeing those changes in another? JOËL: I have not had issues with that. Of course, I'm not jumping between machines within 30 seconds of each other. Generally, I'm also connected to the internet. So I haven't had a situation where I make a change to a machine not connected to the internet, and then later on, I edit an old version on a different machine that is connected to the internet, and now we have conflict. I've not run into that problem. STEPHANIE: Okay, cool. That sounds good. It's funny you mentioned that because it's just the other day, off-mic; you and I were on a call doing a little bit of pairing. And you were on both machines at the same time [laughs] because we had to use one for our call. And then you were looking something up on your client computer as well. And the thought of you just using two computers at once was very amusing to me. JOËL: It's the ultimate hacker move in...I was going to say bad, but that's maybe a little bit too judgmental, but yeah, in classic, I feel like police shows, things like that. STEPHANIE: I do have one more thought about note-taking that we haven't talked about before. But I'm really curious, how do you deal with thoughts you have on the road during a time you don't have a device on you? Do you go and write that down somewhere, or what do you do with those? JOËL: I have an absolutely awful solution, which is I add it to my mental stack and hope it doesn't overflow before I get to a computer. STEPHANIE: That's really funny because I used to do something similar where if I had a to-do list or something like that in my head, I would remember the number of items on my list to try to cue me into remembering what those items were. The worst thing that would happen is I would remember that I had three things on my to-do list but could only remember two. And so I had to just [laughs] deal with my existential anxiety about knowing that there was something else that I had forgotten about but could not remember [laughs] for the life of me what it was. JOËL: So I do that trick sometimes for my grocery list if I don't want to write it down. I'll just be like, oh yeah, go to the grocery store, make sure there are five items in my basket when I check out. And similar to you, sometimes I have that problem. I had a light-bulb moment the other day, which is that this trick is actually an example of hashing content. STEPHANIE: [laughs] JOËL: So if you're ever hashing the contents of a file and then wanting to compare if another file is the same and you check the hashes are the same. In a sense, you're kind of hashing your grocery list and your shopping cart and trying to see do they both hash to the same value? Now, a good hashing algorithm has an infinitesimally low chance of a collision. Counting the number of items in your list or cart has a fairly high chance of a collision. You could have a cart and a list that both have five items, but they're not the same items. Yet this comparison would still make you think that they're the same. STEPHANIE: This is a very funny metaphor to me. I think the other issue is that as a human and not a computer, I do not have the mental storage space to then also remember what algorithm [laughs] I'm using to hash my to-do list. JOËL: The algorithm is the count function. STEPHANIE: [laughs] True, true, a more sophisticated algorithm then. [laughs] JOËL: Yes, which is why I keep using this not very safe, but it's good enough. STEPHANIE: Sometimes, we just need to be good enough. So, Joël, what's new in your world? JOËL: So, in a previous episode, I think we talked about some work I was doing exploring how to model dependent side effects, particularly D&D dice rolls. So this week, I went from the theoretical to the practical and wrote up a miniature D&D damage dice roll app that you put in a few inputs, and then it will roll all the dice necessary and tell you did you successfully hit your target, and if so, how much damage did you do? And it takes into account all these edge cases. STEPHANIE: Cool. That's so exciting because I think we mentioned last time how that would be a really interesting exercise to write up that code. Did you get any insight from doing that? JOËL: I think a lot of the insight that I got came from the initial diagramming phase. And I think coding it out really solidified the things that I had learned from the diagramming. Of interest here is that there are effectively or potentially four separate dice-rolling phases that can happen. First, you're rolling to see can you hit your target? And depending on the situation, you're rolling one or two dice. And then after that, you're rolling to see if you do hit, how much damage you do. And you're either rolling one set of dice, or you might be rolling two sets of dice if you happen to do a critical hit. So I think that the diagram that I had clearly showed these are four sets of randomness that have to happen and then how they relate to each other. These two are dependent on each other; these two are independent. I think one thing that was really interesting that I learned from the code is that for something like a dice roller, you usually don't want to see just the result. Because if I just have a button that says how much damage did I do, and then I get a number back that says, "You did zero damage," or "You did three damage," as a person, that's not very satisfying. And I don't know that I fully trust it. I want to see all the intermediate results. So I want to see, oh, did I roll two different dice for that initial two-hit? What were the numbers? And then I can say, okay, well, I need to roll above a five or roll above a 10. And I rolled these two dice, and they were both under 10. That makes sense why I didn't hit. Or I rolled one of them above and one of them below, but I was rolling with disadvantage, which means I have to take the lower of the two numbers. So I could have hit, but I didn't. So I think that is really fun as a user to see the intermediate steps. But also, as a developer, it helps me to be confident that the code I wrote works the way I expect it to. STEPHANIE: Yeah, that's really neat. I think what I love about this is that you took something that, in some ways, could be really simple, right? And the implementation could have been just the first thing that you thought of, but you thought very deeply about it and made the dice roller that you wanted in the world. [laughs] I'm curious. Can anyone go check out this repo on the internet? JOËL: Yes. So we can link to the repo in the show notes. And also, the dice roller itself is up online at dnd-damage-roller.netlify.app. And we can link that as well for anybody who wants to go and check it out. STEPHANIE: Awesome. JOËL: I think my goal in this is it's more of a learning exercise. I don't think the world needs another D&D dice roller. There are better ones built into more comprehensive tools. But it was fun for me to work on this, to explore some ideas, and to dig into randomness. I've always had a fascination with random rolls. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! STEPHANIE: So it sounds like the Dice Roller app really scratched an itch for you and was a fulfilling exercise for you and just exploring randomness, like you mentioned, and just a theory that you had about writing good code. I'm curious about how you think about fulfillment at work in general and what brings you fulfillment as a developer. JOËL: Fulfillment is really interesting because I think it's a really kind of personal question. It probably varies a little bit from person to person. But there are probably also some aspects that are global to everyone. I know we've talked about things like psychological safety in the past. And if you don't have things like that, that baseline, it's going to be hard to feel fulfilled. STEPHANIE: Yeah, I agree. I am thinking of Maslow's hierarchy of needs, and in some ways, fulfillment is kind of the tip of the pyramid. If you are feeling safe and like you belong and get enough sleep, like we mentioned earlier, you can reach towards getting into what really feels fulfilling and gives you purpose in life. JOËL: I love that you brought up Maslow's pyramid because like you said, that top part is self-actualization. So you need all those lower layers before you can actually reach the point of true fulfillment on the job. One thing I recently realized about myself is how I tend to approach projects that are in a difficult place. I find a lot of fulfillment in sort of relative change. It doesn't matter if a project is in a bad place as long as the project on a week-by-week basis is moving in the right direction. It might still be in a bad place, but is it better than last week? And was I a part of making that better? That makes me feel good. STEPHANIE: Yes. I have always really admired your optimism around that and how you share even small wins. You're really good about that, actually, and celebrating that. And it's interesting to learn that it's like that process itself that has a lot of meaning for you. Because I think I'm a little bit different in the sense that I have an ideal version of working in my head, and if we're not there, even if we are making some incremental progress week to week, I think I struggle. Sometimes I feel frustrated or stressed because I think that we're just not where I want to be. And I've definitely been thinking about harnessing some of that optimism and celebration that you have around, just making things better a little bit at a time. JOËL: And I think we should be clear that this is not the way one has to be; this is just how I tend to feel on projects. STEPHANIE: Yeah, absolutely. JOËL: I know there are plenty of people who feel most fulfilled when they're on projects where things are mostly good. And then it's not about incremental improvement in the product, but maybe it's shipping a lot of features and feeling like they're moving very quickly. Maybe it's that feeling of speed that gives them fulfillment rather than the feeling of incremental progress. STEPHANIE: Yeah, absolutely. I think what is helpful for me in hearing about this from you and just from others (I love talking to other people and learning about what motivates them.) is seeing what else is possible outside of my own little universe inside my head and doing the self-reflection to be like, okay cool, this works for Joël, but maybe this doesn't work for me. But having the input from other people lets me discover more about myself in that way. JOËL: That is incredibly powerful. I love that. I think in a variety of aspects of my life, but especially when it comes to fulfillment in software and at work, talking to other people, seeing how they relate to a project or to a particular task, and, like you said, getting to see their perspectives that are sometimes totally different than mine. STEPHANIE: Yeah, absolutely. So you just mentioned one aspect of how you find fulfillment when a project is maybe in a tougher spot than usual. I'm curious if you can recall a time that you've been the most fulfilled at work. JOËL: Most fulfilled. I think one of the most fulfilling projects I did was several years ago. We built a dashboard for just exploring a lot of data from medical studies. And so the researchers would upload some time series data for things like heart rate, or skin electro-sensitivity, a bunch of other things, along with a video. It was a kind of an interview-style situation. They were doing a session with a patient. And we would then sync all of these data streams up. We would sync it up to the video, and then you could kind of explore the data. There were scrubbers, so you could kind of scrub through the video, and it would scrub through the time series data all at the same time in sync. You could scrub through the time series data. It would sync the video kind of like bidirectional. You could zoom in on the data. The idea is this is a high-level kind of exploratory tool. And you could then find the interesting bits of data that you could then do more quantitative analysis on. So you could then find a part of the stream and say, this is the interesting part. Clip from 10:55 to 11:10 in the stream, on all streams, and then export just that data in a zip file. And then I'm going to put that through a bunch of math and figure out, oh, is there a correlation between these moments? STEPHANIE: So what about that project was really exciting or fun for you? JOËL: I think the client was incredibly fun to work with. There was like an energy and excitement. This was part of their, I think, Ph.D. thesis. And they were really excited. They were incredibly knowledgeable, just delightful to work with. I think this was a fun...so we built this from scratch. It was a greenfield app. I think it had a lot of interactivity. It had a lot of visuals. It was one of the first projects I got to work on that used Elm. I think all those things combined to just make it a really fun project to work on. It was also a fairly short project. So we had a very kind of tight deadline. We were very pragmatic with absolutely everything on there. Like, what can we do to get this done quickly? Is this feature worth the time? It was kind of a classic MVP product. And I think it was one of the most fun things I've built. STEPHANIE: Cool. I'm also hearing there was probably some creative aspect of it that was really fulfilling for you, like exploring a lot of new things. Like, you said, you were working with Elm for the first time. And the project itself sounds very different from some of our other more typical consulting engagements and also the collaboration aspect. Like, you mentioned the tight deadline, which compelled you all to work really closely together to make this really cool thing in that short amount of time. JOËL: Exactly. Yeah, it was like a three or four-week project that I look back on really fondly. Like, oh, that was a good time with those two colleagues and that client, and we did a thing. It was really cool. STEPHANIE: That's awesome. JOËL: I think it's really interesting that just hearing that story, you're immediately picking up on, like, oh, I see elements of creativity and exploration. Do you have kind of an internal system that you use to analyze projects that you're on to be like, oh, this is a project I'm enjoying because of this element or that? Because you seem very self-aware around these types of things. STEPHANIE: I'm glad you asked that because I think I was trying to reflect back to you some of the things that I picked up about what you were sharing. I have been reading a book, surprise, surprise. JOËL: What? You read? STEPHANIE: I read. [laughs] It's called "Engineering Management for the Rest of Us" by Sarah Drasner. And I am not an engineering manager, and I don't necessarily know if I even want to be. But I really enjoy reading management books to better understand how to manage myself or how to be a person who is managed. And one of the things she talks about is understanding an individual's values and how those things end up being what motivates them and also likely what brings fulfillment. And so after I learned about the value of values, I started thinking, okay, what is it that I am motivated by? And really reflecting on when I have felt really good about work and also when I felt challenged or unhappy at work and what things were missing during that time. So the things that I have realized that I am very motivated by are human connection. I love spending quality time with people, and that is probably why I enjoy pairing so much. But also, in my one on ones with my manager, I really enjoy that time just being time for us to share space and get to know each other and talk. It doesn't necessarily need to be going through agenda items or a status report or even necessarily talking about my project. JOËL: So you mentioned that you value quality time with others. Is that a reference to "The Five Love Languages" concept? STEPHANIE: It is. It is. I think I also made a bit of a connection there too because what I like in my personal relationships also obviously applies to work. JOËL: Yeah, it's how you feel appreciated, how you feel fulfilled. And just for our listeners who may not have read this book, I think the concept is that there are five ways that people like to receive appreciation. STEPHANIE: Yeah, I think receive and both express appreciation and love. And quality time is one of them. JOËL: Yeah, yeah. And the other four, if I remember correctly, are acts of service, words of affirmation, physical touch. STEPHANIE: Gift-giving is the last one. Yeah, so that was a fun reflection on my part in being able to just know what makes me feel good. And then it also helps me communicate with other people how to work with me. I think that is super important. I love when people share with me what, I mean, I mentioned this earlier, just what drives them and how they like to be appreciated so that I can do my best to try to offer them that. And I guess this actually is a good transition into the next value of mine that really drives me. I was thinking about this because I mentioned just now that I was learning some new React tools, new to me, anyway. And I'm like, yeah, I like learning. But then I was like; I don't know if I like learning the way other people like learning in the sense that it's not the knowledge itself or the process of learning itself that drives me but learning as a tool to better understand myself. So I think personal development is very important to me. And that feels different from how other people might value learning. JOËL: Interesting. So you might be excited to learn a new React testing tool but not because you're chasing the latest, shiny tech but more because you feel like the process of learning this testing tool helps you learn something new about yourself. STEPHANIE: Yeah, I think that sounds right. One of the tools specifically...we're using MSW Mock Service Worker for mocking network requests in Jest. And I was able to use information about testing in Rails and Ruby and apply that to this new tool. And I got to kind of revel in the fact that I could use previous learnings to apply in this new context, and that was really cool to me. So it wasn't necessarily the tool itself or even the process of learning but kind of realizing that I was capable of applying one thing to this less familiar thing. JOËL: So kind of that realization that, hey, you're now far enough in your career, and you have enough experience. You have a broad base of knowledge that all of a sudden, you realize, wait a minute, I'm not starting from scratch anymore. I can apply lessons learned in the past to learn this new thing and make that easier. And that's a really validating feeling. STEPHANIE: Exactly. That was really cool to me, and I felt really good afterwards. I think this week at work has been very uplifting because I've been having all these little mini-revelations if you will. JOËL: I love that. I love that so much. STEPHANIE: So, one thing that I think is very easily conflated with fulfillment is the idea of success. And I kind of want to talk about the distinction between success and fulfillment. Does that bring up any thoughts for you? JOËL: Yes. I think the two are often entangled, but they're definitely not the same thing. It is possible to be fulfilled on a project that is not successful. And it's also possible to be on a successful project and yet not feel fulfilled. But oftentimes, the two go together because when things are going well on a project, they're probably also going well in a lot of other ways, and you might be feeling fulfilled as long as general parameters fit in, right? If values line up, things like that. I know for me I value quality and excellence and doing work that I'm proud of. So I think if I were working at a place that was doing kind of low-quality, low-cost work where it's just like, you know what? You want cheap and low-quality? Come to us. We'll just get it done quick and cheap. And yeah, it's not going to be great, but you get what you pay for. There's a reason this part of the market exists, and it's a totally valid way to build software. But I would not feel fulfilled there, even though maybe the clients are absolutely happy with the work that's being done. So I think that would be a situation where there is success, but I might not feel personally fulfilled. STEPHANIE: Yeah, I'm glad you brought that up because I think I really struggled in the beginning of my consulting career with equating client happiness with success. And I'm now just starting to kind of unlearn that a little bit and realizing that success means different things to different people. So even if we talk about thoughtbot for just a second, one of thoughtbot's values as a company is seeking fulfillment in everything that we do. And so even though, like you said, the client might be totally happy, for thoughtbot, that may not be a successful client engagement if you, Joël, as the developer staffed on that project, didn't find fulfillment. Because what's success for us here is that we are fulfilled in the project itself. And that was really helpful because, in some ways, I'm like, well, who cares? Who else cares besides me that I'm fulfilled? And to be like, oh, yeah, actually, what our collective success means is that I'm fulfilled, and you're fulfilled. That was really important to me and one thing that I really appreciate about working here. JOËL: Fulfillment comes partly from our environment, from maybe the project that we're working on, our colleagues, but also comes to a certain extent from ourselves. And to a certain extent, we can drive that ourselves as well. And I think that first step is a certain amount of self-awareness and self-understanding. You are clearly a master at this. What are some things that you do to drive that self-understanding, to build maybe a sense of how you become fulfilled, and identifying those values that make you feel fulfilled on a project? STEPHANIE: Listen, [laughs] I don't know if I would call myself a master at this, only that I'm very actively working on it in my life right now, in therapy, but also in talking to other people about this because, yeah, sometimes it has caused me a lot of turmoil. I'll be really stuck in a rut or feeling a lot of burnout, and that, ironically, actually motivates me to be like, how can this be different? And oftentimes, that means I have to look inward. But you and I had a conversation last week off-mic that was really helpful for me because I was feeling really bummed about my client work and it not going the way that I thought it would. And your insight helped me think about the project a little differently and think about metrics of success differently. For that project, I could not expect that project to look exactly like all of my past experiences. And success for those projects were not the same for this project. So yeah, talking to others, I highly recommend that. JOËL: I guess you mentioned that you read a lot of management books and a lot of books geared towards managers for discussing things like how to set up a one-on-one. Those are almost like...they're not really therapy, but they kind of lean a little bit towards that sometimes and trying to create fulfillment for your direct reports. So maybe seeing it from the other side helps you build understanding. STEPHANIE: Yeah, actually, that's totally a great call out because I highly recommend reading books about [laughs] management, even if you're not interested in management. Only because there's no guarantee that you'll have a good manager who can do all those things for you, so if you can equip yourself for doing those things, then you are likely to have a better workplace experience, in my opinion. JOËL: And I guess the obvious one that we have not talked about is if you do have a good manager, have these conversations with them. STEPHANIE: Yeah, absolutely. JOËL: Part of their job is to help you be more fulfilled. And they should be having conversations to maybe help you discover those ways that you are feeling fulfilled at work and how to get there. Here's one aspect that we have not talked about that I'm curious to explore a little bit: recognition. STEPHANIE: Ooh. Yeah, that's a good one. JOËL: How important is it for you to feel recognized, either by your colleagues or by the more official org structure? STEPHANIE: This is a great question. I do value recognition from people I trust. So I think we were talking about sometimes client projects are not successful, but you tried your best, and you did do valuable work. And you might not hear that from the client. They might think differently. But if a trusted co-worker can provide that validation for you, oftentimes, I find that more helpful. JOËL: That's an interesting distinction. And I think recognition has a very different weight depending on the source it's coming from. If it's somebody you look up to, and they just give you a shout-out or something, I'm riding that high all day long. STEPHANIE: Yeah, yeah, that's a great point. How do you like to receive recognition? JOËL: Hmm. So at thoughtbot, we have an internal system where we can give shout-outs to each other. They're called high fives. And they get shared directly to the team Slack channel. And it's a small thing, but I really appreciate it when somebody calls out like, "Hey, I appreciated this thing that you did," or "This is the thing that had an impact on me," or "I appreciated the thing that you shared." Those things make me feel really great. It's a small thing. It takes 30 seconds to do. But I really appreciate that. And it's something that I am looking to more intentionally do more of because it's fun to receive recognition, but it's also really valuable to give recognition. STEPHANIE: Yeah, I'm with you. I am also trying to be intentional about being even more generous with my positive feedback for others. And I think there's also some degree of recognition and validation to give to yourself. JOËL: Self-validation. STEPHANIE: Yeah, yeah. I mean, I'm definitely trying to do more of that. Because if I'm doing work that lines up with my values, I want to be able to pat myself on the back for it, even if no one else will do it for me. [laughs] JOËL: What does that look like? You're like standing in the mirror and saying, "Good job?" STEPHANIE: [laughs] JOËL: Do you have maybe a document where you kind of list the things that you feel proud of, even if nobody else has noticed? What does that look like for you? STEPHANIE: Ooh, yeah, a brag document. I think some folks at thoughtbot have recommended doing that. For me, it's going and getting myself a treat. JOËL: Oh, I like that. STEPHANIE: So maybe like a latte the next morning or going to get just a sweet thing. Yeah, that's my way of doing it. JOËL: So we've talked about self-recognition, recognition from colleagues. I think another element is recognition from management or the company that you're working at. That can be just praise. But oftentimes, I think when you're looking at recognition from something a little more corporate, it has a more kind of concrete aspect to it. And maybe that is come yearly evaluation time; there's a raise that recognizes the fact that you've done good work. I know for me, last year, I got a big promotion. And I felt like I had been performing at a level that was kind of pretty far above and beyond the title that I had. And getting that promotion, in some ways, was very much kind of validation and recognition of the fact that I had been performing at that high level. STEPHANIE: Yeah, it sounds like the acknowledgment for the expanded work that you've been doing was really motivating for you. JOËL: Yeah. It's interesting you mentioned that acknowledgment is really motivating because it really is, and sometimes the reverse is also true. You feel discouraged or unmotivated because the good work that you're doing is not recognized. Are you familiar with the idea of intrinsic versus extrinsic motivation? STEPHANIE: Yeah, I am. Being motivated by something externally, like someone offering a promotion, or a raise, or whatever, versus it coming from yourself. JOËL: Yeah. And I think for many people, you're probably not purely motivated by one or the other. There are some things where you're motivated by your own internal values, as we mentioned earlier, and some things where you're motivated by incentives offered at work. And that balance will probably shift over time and in different moments. But having a little bit of both can be really, really powerful. If you can be living up to your values and then get rewarded for it, that's kind of peak fulfillment right there. STEPHANIE: Yeah, that's the sweet spot. Yeah, I wish that for everyone in the world. [laughs] On that note, shall we wrap up? JOËL: Let's wrap up. [laughs] STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
thoughtbot had an in-person Summit in the UK! Joël recalls highlights. Stephanie is loving daily sync meetings on a new project. The idea of deleting code has been swimming around in Stephanie's brain recently because she's been feeling nervous about it. Together, Joël and Stephanie explore ways of gaining confidence to delete code while feeling good about it. This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Thoughtbot summit video (https://www.youtube.com/watch?v=6d7gUq5J-ck) Gather Town (https://www.gather.town/) Sustainable Rails episode (https://www.bikeshed.fm/368) Chelsea Troy on deleting features (https://chelseatroy.com/2021/01/21/reducing-technical-debt/) Unused (https://unused.codes/) elm-review-unused (https://package.elm-lang.org/packages/jfmengels/elm-review-unused/latest/) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And today, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I just got back from a few days in the UK, where thoughtbot has been having an in-person Summit, where we've brought people from all over the company together to spend a few days just spending time with each other, getting to know each other, getting to connect in person. STEPHANIE: That sounds like it was a lot of fun. I've been hearing really great things about it from folks who've come back. Unfortunately, I couldn't make it this year. I got sick a little bit beforehand and then ended up not being able to go. But it sounds like it was a lot of fun just to get together, especially since we're now a remote company. JOËL: Yeah, I'm really sorry you weren't able to make it there. It would have been amazing to do a Bike Shed co-hosts get-together. STEPHANIE: I know. In the same room, maybe even record. What a concept. [laughs] JOËL: So thoughtbot is a fully remote company, and so that means that getting a chance to have people to come together and build those in-person connections that you don't get, I think, is incredibly valuable. I was really excited to meet both the people that I work with and that I see on my screen every day and people who I don't talk to as often because they're working on different teams or different departments even. STEPHANIE: What was one highlight of the time you spent together? JOËL: I'll give a couple of highlights, one I think is more on the activity side. We went bouldering as a group. This was a really popular activity. We were trying to sign up people for it, and it was so popular we had to make two groups because there were too many people who were interested. And it was really fun. There are people with a whole variety of skill levels. Some people, it was their first time, some people had been doing it for a while. And just getting together and solving problems was a lot of fun. STEPHANIE: Yes, I saw that. That was one of the things I was really looking forward to doing when I was still thinking that I was going to go. And it's cool that it had opportunities for both beginners and people who have been doing it before, which I think, if I recall correctly, Joël, you are a boulderer yourself back home. So that's pretty neat that you were able to, yeah, I don't know, maybe share some of that experience IRL too. JOËL: Yeah, yeah, I think it's great because people were able to help each other. Sometimes you have a different perspective down on the ground than you do up on the wall. And then, in my case, because I've done it a lot, I know a little bit of actual climbing technique. And so I can give some tips on, like, oh, if you're stuck and you don't know how to get past a particular point, or you don't know how to start a particular climb, or your arms are getting tired halfway up, here's maybe a small change you can make that would make things easier for you. STEPHANIE: Honestly, that also sounds like a really good metaphor for pair programming, [laughs] like, looking at things from different perspectives, you know, someone who's on the wall? I don't know what the lingo is. But it's the equivalent of someone driving in coding, the navigator having a little more perspective and being able to point out things that they might not see that's right in front of them. JOËL: I love that metaphor. Now I'm going to think of that both when I pair and the next time I climb. STEPHANIE: I love it. JOËL: I think climbing, when I do it, it's always more fun with a friend, specifically for what you were saying. I climb alone sometimes, but as much as possible, I'll reach out to another friend who climbs and say, "Hey, let's climb together." And then we can alternate on the same route even. STEPHANIE: That's cool. I didn't realize that it could be such a social activity. JOËL: It is very much a social activity, and I think that's part of the fun of it. It's challenging physically but also mentally because it's a puzzle that you solve. But then also, it's a thing that you do with friends. I think another aspect that was a highlight for me was getting a chance to connect with people from other teams, other departments within thoughtbot. I think one thing that was really nice when we were located in an office is that over lunch, or just at the water cooler, or whatever, you would connect with people who were in other teams and who were in different departments. So I might talk to people in People Ops, or in marketing, in operations just sort of in the natural course of the day in a way that I think I don't do quite as much of now that we're more remote. And I tend to talk more with other developers and designers on my team. So I think that was really great to connect with people from other teams and other departments within the company. STEPHANIE: Yeah, I know what you mean. I think I really miss the spontaneous, organic social interaction that you get from working in an office. And I think we've maybe talked about remote work on the podcast before, or previous co-hosts Steph and Chris have also talked about remote work. But it definitely requires a lot more intention to manifest those connections that otherwise would have been a little more organic in person. And so, while you all were at an in-person summit in the UK, there was also a virtual summit hosted for folks who weren't able to travel this time around, and I really appreciated that. I got to spend a day just connecting with other people in Gather Town, which is a web app that's like a virtual space where you have little avatars, and you can run around and meet up with people into virtual meeting rooms on this map. [laughs] I'm not really sure I'm describing it well, but it's very cute. It is almost like a little video game. It's like a cross between a video game and video conferencing [chuckles] software. But yeah, I think I just really appreciated how inclusive thoughtbot has been doing remote work where, like, yes, we really value these in-person gatherings, and we understand that there is a bit of magic that comes from that, but also making sure that no one's left out. And at the end of the day, not everyone can make it, but we were still able to hang out and socialize amongst ourselves in a different way. JOËL: Agreed. I think that inclusivity is part of what makes thoughtbot such a great place to work at. STEPHANIE: Speaking of inclusivity, I mentioned a few weeks ago that I joined a new project recently and had been going through the onboarding and hopping into all these new meetings. One thing that I've really enjoyed about this new client team that I'm on is that in their daily sync meetings, we all share what we're working on. But we also all share something that's new to us, which is a little bit meta because we do that on this podcast. [laughs] But each person just shares maybe something they learned at work but also usually something just totally not work related like a new show that they're watching. There's another person on my team who learns a lot of things from YouTube videos. And so he's always telling us about the new thing he learned about, I don't know, like mushrooms or whatever, or AI [laughs] through YouTube. And yeah, someone else might show a sweater that they just knit themselves. And it's been a very easy way to get to know people, especially when you're meeting a whole new team. And yeah, I've been enjoying it a lot. It's made me feel very welcome and like I know them as people outside of work. JOËL: I love that. Yeah, they're more than just people you're shipping code with. You're able to build that connection. And it sounds like that helps smooth the...maybe we can say the social aspect of onboarding. Because when you onboard onto a project, you're not just onboarding onto a series of codebases and tools; you're also onboarding onto a team, and you need to get to know people and build relationships. STEPHANIE: Yeah, absolutely. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: So you've been...is it two weeks in a new codebase? Have you gone and deleted any code yet? STEPHANIE: I wish. I am glad you asked this question because this has been a topic that has been swimming around in my head a little bit lately because this new client codebase it's very big and it's quite old. Like, I've been seeing code from 10 years ago. And it's been a really challenging codebase to get onboarded into, actually, because there's so much stuff. In fact, I recently learned that some of their model specs are so big that they have been split out into up to seven different files to cover specs for one model. [laughs] So that has been a lot to grapple with. And I think in my journeys working on a starter ticket, I've just stumbled upon stuff that is very confusing. And then I might follow that thread only to realize that, like, oh, this method that I spent 20 minutes trying to grok turns out it's not actually used anywhere. JOËL: That's a lot of dead code. STEPHANIE: It is a lot of dead code, but I am also not quite feeling confident enough to delete it because I'm new, because I have no idea what consequences that might have. So, yeah, the idea of deleting code has just kind of been swimming around in here because ideally, we would be able to, but, for some reason, I don't know, at least for me, I feel very nervous about it. So it hasn't been something that I've reached for. JOËL: That's a great question because I think in maybe Ruby, in particular, it's not always obvious if code is being used or not. When you do find yourself deleting code, how do you gain the confidence that it was safe to delete that? STEPHANIE: Yeah, that's a good question. In the past, when I've done it successfully, I'll probably post a Slack message or something and being like, hey, I noticed this code is not being used anywhere, or I'd like to delete it because why, like, I don't know, because it's been misleading me because it's just not providing any value. And then kind of give it like a day or two, and if no one speaks up about it, then I will usually go ahead. And obviously, get some code review, hopefully, get some other eyes on it just to make sure that whatever assumptions I made were valid, and then go for it. And then just watch [laughs] the deployment afterwards and make sure that there are no new errors, you know, no new complaints or anything like that. And, yeah, I think that has been my process, and I've definitely found success doing that. But I have also experienced a bad result [laughs] from doing that where one time, on my last client project, we were refactoring the signup flow. And we realized that after you signed up, you were redirected to this blank page for like 10 seconds or something. It was completely empty. There was nothing on it except a spinner, I think. [laughs] And then it would then redirect you to the dashboard of the app. And we were like, oh, we can definitely delete this. We have no idea what this is doing. We don't want to try to refactor this as part of the effort that we were doing. And so we deleted it, only to find out later from the marketing team that they had been using that page for something Google Analytics related, and we had to revert that change. And it was a real bummer because I think when we removed it, we felt good about that. We were like, oh yes, deleting code, awesome. And then having to bring it back without a clear plan of how to actually fix the problem that we were trying to solve was a bit of a bummer. JOËL: So, as programmers, we're hired to write code. Why does it feel so good to do the opposite of that, to delete code? STEPHANIE: That's a great question. I actually want to know what you think about this, but before that, I wanted to plug this Slack channel that we have at thoughtbot called Dead Code Society, where people can post their PR diffs showing more red than green, so more lines removed than lines added. And I have been really enjoying that Slack channel. It's very delightful. [laughs] But, Joël, do you have any thoughts about why it feels so good to delete code? JOËL: There are probably a few different reasons. Especially when it's not your own code, you're often not attached to it. There's often, I think, the sense when you go into an existing codebase you're just like, oh, everything's just bad, and I don't understand it. And those other coders who wrote this didn't know how to do their job and kind of be the curmudgeon character. So it just kind of feels good to remove that and maybe rewrite it yourself. I would say that's not a good mindset to go in for deleting code. I think there are positive ways where it is actually a good thing. STEPHANIE: That's fair. Just removing code because you would write it differently is not necessarily a net positive. [laughs] JOËL: But I think...so when I initially asked the question, I said, "We're hired to write code." And I think that's a bit of a false assumption built into the question. We're not hired to write code. We're hired to solve problems, to build solutions. And as much as code can be an asset in solving problems, it's also a liability. And code has varying maintenance costs that are typically not low. They vary from expensive to very expensive. And so any chance we get to remove some of that, we're removing some of the carrying costs, to use a term that we discussed a few episodes back when we talked about sustainable Rails. STEPHANIE: Yeah, absolutely. One thing that I remember you sharing about the client project that we're both on in the past is they have a very cumbersome test suite. And in some situations, you have wanted to advocate for deleting some of those tests. JOËL: Deleting tests is a really, I think, spicy take because you're trying to get better test coverage. And if your test coverage isn't great, you don't want to lose any of that. So there's definitely a loss aversion there, and we might need it later. At the same time, tests have a cost, cost to run, cost to maintain. And if they're not providing a lot of value, then the cost of keeping them around might be higher than any kind of benefit they're giving you. And I think a classic case of this is tests that have either been marked pending in the codebase with an exit or something like that or that have been marked in your CI server as muted; just ignore failures from this test. Because now you're still having to maintain, still having to execute these tests. They're costing you time, but they're giving you zero benefit. And they're just taking up space in your codebase, making it harder to read. So if you can't get these tests back into the point where they're actually executing, and you're caring about the output, then you probably don't need those tests, and they can be removed. STEPHANIE: Yeah, that's fair. I'm thinking about the perspective of someone who does not want to delete those tests. I think in the past, I've seen it and even felt it myself as someone who probably wrote the tests, kind of hoping for some ideal world where I will finally have time to go back to that test. And I already put a lot of effort into trying to make it work, and I want to make it work. I want to have the value of that test. And it's kind of like a sunk cost fallacy a little bit where it's like, I already spent however much time on it that it must have some kind of value. Because just hearing that someone else wants to delete the test can kind of hurt a little bit. [laughs] And it's tough. I do think that it's easier for someone with an outside perspective to be like, "Hey, this test is costing more than the value that it's providing." But yeah, I can see why people might have a little bit of pushback JOËL: Sometimes, the value of a test is also in the journey rather than the destination. STEPHANIE: Yeah, that's a good point. JOËL: So if you're practicing TDD, maybe you use some tests to help you drive out some functionality, help you come up with a design that you want to do. But maybe once you've actually created the design, the test that helped you get there is not actually that useful. I've heard some people will do this by writing a lot of more system tests-like tests that are very integration-heavy, that have a lot of edge cases that you might not care to test at that level, at that granularity. And so they use those to help drive a little bit of the implementation and then remove them because they're not providing that much value relative to their cost anymore. STEPHANIE: I think that's a really good point. The tests that you write for implementation can have value to you as a developer, but that's different from those tests having value to the business when you commit them to a codebase and incorporate them as part of CI and a CI that everyone else has to run as well. So yeah, I think in that case, the context definitely matters. And hopefully, you can feel good about the value that it provided but then also have that eye towards, okay, what about the business, and what values does the business have? JOËL: Yeah, and accept that the test did the job that it was supposed to do. It got you to where you needed to be, and it completed its purpose. And now it's ready to move on. STEPHANIE: Another thing that I recently read about deleting code...and this was from Chelsea Troy. She advocates for regularly evaluating features in an app and deciding whether they're providing enough value to justify keeping around and maintaining for developers as well. And I thought that was really interesting because I don't know if that's something that I'd really considered before that sometimes an app might outgrow some features, or they might not be worth keeping around because of the problems or the maintenance costs that they carry into the future. JOËL: That's fascinating because I think you're taking the same analysis we were talking about tests and then kind of like bringing it up now to the product level. Because now, we're not just talking about deleting code; we're talking about deleting functionality that a product might have. STEPHANIE: I think the challenge there is that the effects of the carrying cost of a feature is not necessarily felt by the business stakeholders, or product folks, or people operating at a higher level, but it is felt by developers. If there's a bug that's come up from this old feature, and oh, I have never seen this feature before, and now I have to spend a day learning about what this thing is before I can fix the bug. It did feel like a radical idea that maybe developers can play a part in advocating for some features to be retired, that is, you know, maybe separate from how products thinks about those things. JOËL: I think in order to be able to make those decisions or really just to be part of those conversations, the dev side needs to be really integrated with the product team and with larger business objectives. And so then you can say, look, if we take a week of one developer's time to provide the support this feature needs and we have one customer paying $20 a month for it, that's not a good business prospect. Now, is this strategically an area that we're trying to grow? And so yeah, we're doing it for one customer, but we're hoping to get 100 by the end of the year, and then it will be worth it. Then yes, maybe we keep that feature around. If this is the thing, like, we experimented for a few weeks five years ago, and then it's just kind of hang around as a legacy thing that this one person knows about and uses, then maybe it's worth saying, look, this has a high business cost. It might be worth sunsetting that feature. But it's a conversation that everybody needs to be involved in. STEPHANIE: Yeah, yeah. I like the idea of it being something more proactive versus, I don't know, something that I think I've seen at other orgs and just in general as a person who uses digital products, like, a feature or a product, just kind of dying. And probably the organization just wasn't able to find a team to continue to support it, and it just kind of kept being this burden. And then, eventually, it just was something that they had to let go. But then, at that point, you had already spent all of that time, and effort, and energy into figuring out what to do with this thing. Whereas the approach that Chelsea is advocating for is more realistic, I think, about the fate of [laughs] software products and features. And as a developer, I would get that feeling of deleting [laughs] code that is so satisfying. And I'm just not burdened by having to deal with something that is not providing value, like cumbersome tests. [laughs] JOËL: I think it's always the fundamental thing that you have to go back to when you're talking about deleting code, or features, or anything is that sort of cost-benefit analysis. Does this thing provide us any value? And if so, does that value outweigh the cost of the work we need to do to maintain it? And in the case of dead code, well, it's probably providing zero value, but it's imposing a cost, and so we want to remove it. In the case of a test that is not muted or pending, then maybe it does provide some value. But if it's really brittle and constantly breaking, and it's costing us many hours of fixing time, then maybe it's not. If we can't find a way to fix it and make it more valuable because sometimes it's the other option, then it might be worth considering deleting it. Have you ever, on a codebase, taken some time to actually seek out code that could be deleted as opposed to just sort of stumbling onto it yourself? STEPHANIE: That's a good question. I think I have not just explored a codebase just looking for stuff to delete, but I have...maybe if you had something under a feature flag and you no longer needed the flag because it was released to everyone, you know, going back to delete it because you specifically made a ticket to make sure that you went back and cleaned that up. I do really appreciate the tracking of that work in that way and just making sure you're like, hey, I want to avoid a situation where this becomes dead code. And even just making a card for it is putting that intention out there. And hopefully, someone, if not yourself, we'll take that on because it's important. JOËL: Yeah, kind of proactively trying to make sure that the work that you've done doesn't become dead code, that it gets pruned at the appropriate moment. STEPHANIE: What about you? I'm curious from your perspective as an individual contributor when you are just moving through a codebase, and you see something suspiciously [laughs] looking like dead code what you do with it. JOËL: I often like to split out a small PR just to remove that if it's not too much work and it's semi-related to what I'm doing. I'd like to give a shout-out to two tools that can help detect or confirm that something is dead code. One is Unused, written by former thoughtboter Josh Clayton. It uses, I think, Ctags under the hood to track all the tokens in an app and then tries to determine are there tokens that are orphaned, that are isolated, and are not used? And it can then build you a report. And that can be good if you're doing a code audit of a codebase or if you're looking to confirm that a piece of code that you're working on might not be, like, is it actually used or not? Another one is elm-review-unused, which is a plugin for elm-review which is Elm's linter, kind of like RuboCop. And what's really nice there is because it reads the AST, and Elm functions don't have side effects. You know that if something is not reachable from the main function that, it is completely safe to remove. You've run the script, and it will delete a bunch of functions for you that are unused, and it's 100% safe. And it is very thorough. It finds all of the dead code and just removes it. It's practically just a...it's not a button because it's a script that you run but that you can automate to run on commit or whatever on the CI. But yeah, that's an amazing experience to just have it auto clean-up for you all the time. STEPHANIE: That's really cool. I like that a lot. I think that would be really nice to incorporate into your development workflow, like you said, that it's part of the linting system and just keeping things tidy. JOËL: Yeah, I think it's a little bit harder to have something that's quite as thorough for a Ruby or Rails app just because it's so dynamic, and we've got all this metaprogramming. But yeah, maybe this would be a thing where you would want to run something like Unused or some other linting tool every now and then to just check; hey, do we have any dead code that can be removed? STEPHANIE: Yeah, absolutely. And I think this is totally a little bit different because we're just talking about tools, but I'm also thinking of red flags on a team level where I have definitely asked in a Slack channel, "Hey, I've never seen this feature before. What does it do?" and just crickets. [laughs] And even the product folks that I'm working with, they're like, "I don't know. It predates me," that being a bit of a smell, [laughs] if you will, to reevaluate some of those things. And those flags can exist on many different levels. JOËL: That's always terrifying because you're like 80% sure that this is dead code, but there's like a 20% chance that this powers the core of the app, but nobody's touched it in 10 years. STEPHANIE: Yeah, it is very scary. [laughs] JOËL: Hopefully, your test suite is good enough that if you comment out that function and then you run your test suite, that it just all goes red, and you know that that's actually needed for something. STEPHANIE: Yeah, though I think sometimes you might remove a piece of dead code, and there are some issues afterwards, and you find out, and you just revert it, and it's fine. At the end of the day, there are a lot of safeguards in place, and we've all done it. And so I think normalizing it is also very important in that it's okay if sometimes you make a mistake there. JOËL: Stephanie is giving you permission to go and delete that code today. Ship it to production, and if something breaks, it's okay. STEPHANIE: [laughs] JOËL: You can revert it. Hopefully, your company is set up where reverting commits from production is a cheap and easy thing to do, and life goes on. So I'm curious, Stephanie, have you ever gone into GitHub and checked your stats on a project to see if you're more red than green or what that ratio is for you on a given project? STEPHANIE: I have. Actually, someone else did on my behalf because I was posting a lot in that Dead Code Society Slack channel. And they then shared a screenshot of my overall contributions to a repo, and it was more red than green. I felt pretty good about myself. [laughs] JOËL: All right. Net negative but in a positive kind of way. STEPHANIE: In a positive way. [laughter] JOËL: On that note, shall we wrap up? STEPHANIE: Let's wrap up. [laughs] Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Overview READERS: Stephanie lives in Wales and shares her horror novel with us. She talks about reading horror and how she likes the build up to the horrific parts. She has only been publishing for about eight years, but feels her folk horror story Reborn is great horror and is a sequel to The Five Turns to the Wheel. AUTHORS: We talk about rejection and how authors can deal with it. Everyone deals with rejection, and even authors that have written more than one book get rejected. Her Book https://www.amazon.com/Reborn-Stephanie-Ellis-ebook/dp/B0BF3QLN17?crid=RI39CDEVUG0D&keywords=stephanie+ellis+reborn&qid=1678646438&sprefix=stephanie+ellis+reborn%2Caps%2C103&sr=8-1&linkCode=li2&tag=discoveredwordsmiths-20&linkId=08578a52740e9fdd2a2a112e8557a321&language=en_US&ref_=as_li_ss_il Favorites https://www.amazon.com/Sell-Haunted-House-Grady-Hendrix/dp/0593201264?crid=2H323PWGZ5KYQ&keywords=grady+hendrix&qid=1678646971&sprefix=grady+hendrix%2Caps%2C103&sr=8-2&linkCode=li2&tag=discoveredwordsmiths-20&linkId=bc8b39da44d31709d7e7f6f86c3f9e50&language=en_US&ref_=as_li_ss_il Website stephanieellis.org Roland Find Roland at https://indestructibleauthor.com Our topics today are: Bookshop.org will start selling ebooks, plus start publishing their own new books! Despite what 'they' keep saying ebooks and Indie books are selling strong Indie author Hugh Howey's Silo (aka Wool) coming to AppleTV+ YouTube https://youtu.be/z_a_2-4neAM Transcript All right, so today on Discovered Wordsmiths, I want to welcome Stephanie Ellis. Good morning or afternoon, Stephanie. How are you? I'm fine. Stephanie: It's actually good evening now. It's nearly six o'clock and it's if I open the curtains, it'd be dark outside and it's very cold. I think it's about five degrees Stephen: and going. Okay. Yeah. So why don't you tell everybody a little bit about yourself, where you live because of the big time difference and what you like to do besides. Stephanie: Okay I'm currently living in Rexton in North Wales with my family. We did live in the south of England for about 30 odd years and then came back up to this area because I've got family in Shopha just over the border. My husband's Welsh and we are trying to find a place to, to live after Covid d cuz that made us ch rethink our lives basically. So we found a place in Rexton, which is gathering a little bit of. On the viewing platforms because of a certain football team which we can hear when they're at home because they're 10 minutes that way. So if they're if it's their plane at home, open the windows and you can hear everybody. It's a lovely part of the world, a lot of countryside around to do a lot of walking. And we can visit elderly parents as well quite easily. So when I'm not writing, I read and I. And I read . But I do walk. I do walk. I like forests. My husband likes hill climbing and mountains. Yes. And I think we're in the right part of the world to combine the two. I go to the gym, so I get up from a desk or get up from a chair and put a book down. That's important. . Yeah, and I try and do some drawing, which I used to do a lot of, but I let that go. But I've tried to pick it up again recently and my one ambition is to learn old English. I've got a book, I keep starting it. I get about six chapters. and then something else happens and I leave it for months, then I have to go back to the beginning. I've done the same chapters several times now, . Wow, Stephen: interesting. Wow. There, there's several things. First of all, I wanna make sure I'm clear when you say football, it's not American football. It is the Stephanie: original British football. The round shape or not? What looks like rugby to us. Your football looks like rugby to us. Rugby shoulder pads, . And Rex, I believe my son was really big in the Crypted community. And I think Rexo has a history of the forest there being a big UFO sighting At ...
Joël has been fighting autoloading in a Rails app recently, and it's been really unpleasant. Stephanie has been experimenting with how she interacts with Slack. What are "the fundamentals"? People often argue for the value of Computer Science classes for the jobbing programmer because we need "the fundamentals." But what are they? And does CS really provide that for us? This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. RailsConf talk on autoloading (https://www.youtube.com/watch?v=57AsQrxjLEs) Joël's RubyConf Mini talk (https://www.youtube.com/watch?v=PHMOsTK1jSE) Stephanie's RubyConf Mini talk (https://www.youtube.com/watch?v=S-ukCrsrTNw) Fun, Friendly Computer Science by Mercedes Bernard (https://mercedesbernard.com/speaking/fun-friendly-cs) Achieving Fast Method Metaprogramming: Lessons from MemoWise by Jemma Issroff and Jacob Evelyn (https://www.youtube.com/watch?v=c2Pa6W_O8oo) Episode on specialized vocabulary (https://www.bikeshed.fm/356) Episode on what to learn (https://www.bikeshed.fm/362) Transcript: AD: thoughtbot is thrilled to announce our own incubator launching this year. If you are a non-technical founding team with a business idea that involves a web or mobile app, we encourage you to apply for our eight-week program. We'll help you move forward with confidence in your team, your product vision, and a roadmap for getting you there. Learn more and apply at tbot.io/incubator. STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I have been fighting autoloading in a Rails app recently, and it's been really unpleasant. This is an older Rails 4 application, so we don't have Zeitwerk, any of the fancy modern things. But the problem I'm encountering is that people write code that references a constant somewhere. And if that constant is not named in the conventional way so that it would load from the proper file, it will raise a NameError at runtime when you try to execute the code. And then you want to reference that constant with a big asterisk there because if anybody else has happened to have loaded that constant correctly either by a manual require or some other method, then that constant will already be in scope, and so you don't get a NameError. So it causes a situation where you have a lot of non-deterministic failures in the code that are not easy to always reproduce either locally or even in the test suite. STEPHANIE: That sounds really frustrating because you must be getting errors left and right that you weren't expecting and then have to deal with. I'm curious, though, because you use the word non-deterministic. But in some ways, I'm thinking that you could perhaps grep or search the codebase for places where we're requiring constants like that and perhaps even audit that. Has that been something you've thought about, or do you think that's possible at all? JOËL: I don't think just grepping is going to be good enough because it's anytime you use a constant, and that's a class name, a module name. Things like that are probably the most common cases. If you're just referencing a constant like an array or a string, it's probably defined in the same file, so you're probably good. But if you're trying to include a module, or inherit from another class, or you want to instantiate another class somewhere, then you can run into issues if the class name or the namespacing for it doesn't line up with the file name so that when Rails tries to autoload it, it doesn't find it where it expects. STEPHANIE: Got it. Okay, that makes more sense to me now. JOËL: When I interviewed at thoughtbot, one of the questions that I was asked, and I don't know if that's still in our interview anymore, was, "Tell us about one of your favorite features in Ruby." And then, "If you could remove one or change one thing about the language, what would you change?" And I think the goal of that was to see if people had enough expertise in the language to both have something they really liked about it but also know the warts; what are the places that are hard to work with? And I definitely know that I said enumerable is my favorite part of Ruby because enumerable is amazing. I feel like, at the time, I didn't have a great answer for what I would change, but I don't remember what I said. I think today, if I had to answer that question, I might say the global namespace for all constants where just because you load another file, it might change what constants are available in a way that can really lead to some surprising behavior sometimes. STEPHANIE: It's really funny that you mentioned enumerable because I think, at this point, you've been at thoughtbot for almost a decade, and you recently gave a talk about the enumerable module. [laughs] And so it sounds like that's something that's still one of your favorite and beloved features of Ruby. So that's really fun. I also agree that autoloading is very opaque to me, especially, like you mentioned earlier; things can be totally different depending on what Rails version you're running. And it sounds like, ideally, when it works, it works. And hopefully, someone has done the legwork of making it effective for you. But when something goes wrong, then something that you had kind of taken for granted prior becomes really hairy. JOËL: I think for those who are interested in digging into really deep how autoloading works in Rails and how it's sort of changed over time, there was a keynote at RailsConf last year that dug into that. That is an excellent talk to listen to. STEPHANIE: Yes, that keynote from RailsConf 2022 about how Zeitwerk was developed by Xavier Noria, Xavier with an X. I was there too. That was a really awesome keynote. And I found it really interesting because, again, it was about this whole aspect that I just took for granted and had never really thought about. And I'm glad that someone else [laughs] figured it out for me. So that was a great reference. Speaking of conference talks, in prior episodes, we had mentioned the talks that you and I gave at RubConf Mini back in November, and the videos for those talks are out. So if you want to check out Joël's talk about enumerable or my talks about pair programming and non-violent communication, we'll link the videos of those talks in the show notes. JOËL: Excellent. So, what's new in your world, Stephanie? STEPHANIE: I've been experimenting with how I interact with Slack. So I used to be very distracted by Slack as someone who needs to mark everything as read in order for the little red badge to go away or for the bold channel name to become unbold. I was constantly clicking around in Slack whenever I had it open for the sake of completing that task of reading messages, even if I wasn't necessarily in a space to fully read or even had time to be spending distracted on Slack. But naturally, I would like, oh, click on this channel because it's bold, so I've unread messages. And then I'd get sucked in and be like, oh, I totally lost like five minutes of my time [laughs] and have forgotten what I was doing prior. So I started experimenting with using Slack as an inbox instead, so more of a pull than push in terms of receiving notifications. And I think it's been working well for me. I've also been leaning on Slack's native keyboard shortcuts instead of using a mouse to interact with the Slack client because that helps me avoid that distracted clicking or going into this channel just to see what's up, and that has also been just okay. I think their keyboard navigation is not my favorite. There are no customization options. So at one point, the shortcut to close the thread window pane was conflicting with my 1Password keyboard shortcuts, so I had to change my 1Password situation. And whenever you have to learn keyboard shortcuts for something different and in ways that might clash with your regular muscle memory for other applications, it's kind of annoying. But that's my journey with using Slack mostly on the keyboard so far. JOËL: What kind of impact have you seen on your focus since you've been using this workflow? STEPHANIE: I think it's been helpful for me to tune out things that I just can't prioritize my time and energy to at the moment. So I'm also pretty decisive when it comes to muting and leaving channels. I'm not in a ton of fun, casual channels because, again, I find them a little bit distracting. If I do want to go see cute dog content, I will go into the pets channel. But it's easier for me to have that be an intentional decision that I'm making as opposed to, oh, look, there are more messages in the dog channel. [laughs] Let me go check them out now. I think it has helped me focus my time and energy on the things that are most important to me. And the trade-off there is that I missed out on some content, but I think that I've become okay with that. And the channels that I am more subscribed to, like our dev channel that we've mentioned on the podcast before any project or team-related communications those, are top of mind for me. And when I do need a little bit of a break and do need some fun banter, I will hop into other channels for that. JOËL: So you brought up a little bit of this idea of FOMO around Slack channels. I think there's an area where our industry at large has a lot of FOMO, and this is around the computer science degree. A lot of people that are in the industry do not have one. There are a lot of different paths that can come into becoming a developer. Some people are entirely self-taught. Some people have gone through a bootcamp. Some people have kind of transferred from other similar or not at all similar industries. So there are a lot of different journeys that people have. But for many people, if you don't have that, there is some FOMO around, “Did I miss out on something?” And there's a word that people always kind of toss around when talking about computer science and specifically the things you might be missing out on if you don't have it, and that is the fundamentals. You might be missing out on the fundamentals or, oh, well, what if I don't know the fundamentals, then I'm faced with a problem? And I won't know what to do, or it might make me learn more slowly. Is that something that you've heard thrown around? STEPHANIE: I agree that the word fundamentals is extremely vague. In fact, I'm just going to say it: I have no idea what most people mean when they say the fundamentals, or at least I think they could mean a lot of different things. And so when that term is used, maybe I should just be asking for clarification [laughs] because I think that we could be talking about a lot of different things. Before we get into what fundamentals of programming or computer science or whatever means to each of us, Joël, do you want to share a little bit about where you're coming from in terms of any education prior to becoming a developer? JOËL: Sure. So I do have a CS degree. I actually learned to code before college. I read some books, did some tutorials on the internet, played around with some code on my own, had a lot of side projects, and even at some point was, freelancing a few small projects as well. But I always struggled trying to build projects larger than a certain size. I felt like they would sort of implode under the weight of their own complexity. I definitely felt like there's got to be some underlying fundamentals that I'm missing, some theory of writing code that would explain how to structure things in a way that scales. And this is not scaling to millions of users; this is scaling beyond 100, 200 lines of code, maintainability. And so, I had really high hopes for a computer science degree. And honestly, I think I was a little bit disappointed. I learned a lot of other interesting theoretical things, but not a lot that was actually answering that underlying problem. And I didn't really get the answers I was looking for until I started working more in the industry, doing various internships and then later on full-time jobs as well. And just over the years, that has sort of built up a lot of answers to those questions that I had. But I didn't necessarily find them in my computer science degree, so I have mixed feelings. STEPHANIE: I had no idea that you were doing that level of coding prior to studying in college. That's really cool. Now that I'm thinking about it, I think that's the case for a lot of people. They might get a taste of coding when they're young. It was true for me. I was a young girl on the internet in the early days writing HTML and CSS on neopets.com. And that is also how I got my first taste, and kind of wanted to explore further. So, in college, I studied journalism actually. That was where my interests were at the time. But I did take some computer science courses on the side and ended up completing it as a minor. But I'm with you that the education I got didn't quite match up with what I was expecting. In fact, I kind of struggled, I think, because there weren't a lot of more relatable applications to what I was learning, and so I was very bored and disengaged, I think. And so when I came out of college, I didn't think I wanted to do software development, or programming, or anything like that because I didn't love taking those classes. And, I don't know, I'm going to get into my whole career history today. But I basically fell into the role of development. It was kind of like, oh, you have these coding skills; we need these coding skills. I was like, okay, I guess this is my job now. [laughs] And I think you and I are actually kind of similar in the sense that once you started doing the work, you started to see a lot of the things that you had learned previously that you could then apply. Does that sound right? JOËL: Yes. And I think maybe more so over the years, there are some things where it's like, oh, with a five-year mark, it's like, oh, finally now I feel like I've got enough practical experience where I can start to appreciate some of these underlying things, or I'm getting into things beyond just the basics of writing a simple Rails app where I start to need some of those other concepts. And some of those it's five years, some of those are ten years. And so it's sometimes nice to have something to go back to. Although after ten years, there's only so much I remember, so sometimes it's just having a keyword that I can Google and dig into further. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: So earlier, you mentioned that fundamentals is a bit of a weasel word; it means different things to different people. So I'm curious for you, what do you think of when you think of fundamentals And, maybe more specifically, from the perspective of a web developer? STEPHANIE: Yeah, I want to caveat this by saying that I think you can learn these different skills in many different ways; that could be formal education, that could be a bootcamp, that could be self-taught. But these three categories are what I think are useful education for a web developer. So firstly, understanding how computer systems work at the abstraction you're using and maybe even one level lower. So this is likely the programming language or framework and the tools that you're using, and I think a lot of bootcamps teach this. They want to teach you the skills you need to get a job and do that job. The second category, I would say, is more theoretical. So the theories of computer science and math that you and I alluded to earlier as not having been super practical at the time that we learned them. I guess that's probably why they're called theories. [laughs] But I'm thinking like algorithms, data structures, and other concepts like O notation or whatever. And then thirdly, this one, I think, doesn't get talked about enough. But there's this whole world of practical skills that we do in the industry that I don't quite think are taught in either environment, so that looks like reading code and reviewing code, especially as it relates to working in an existing application as well as writing tests and documentation, and, in general, working with other people. I think a lot of programming education focuses on the act of writing code when I think there's a lot to learn from reading code and analyzing it. And that's something that I have been thinking a lot about the more I spend doing it in my job. JOËL: I like the way you've sort of broken these down into more relatable categories rather than just this generic idea of the fundamentals. I think when people think of the fundamentals, they're probably thinking mostly of your category two, the more theoretical underpinnings. Some of those are actually quite relevant, I think, to the day-to-day work that we do. And then some of them are very kind of abstract and maybe even to the point of mostly being relevant if you're doing research but not that interesting if you're writing code on a day to day. Does that sound about right to you? STEPHANIE: That's fair. I revisited a series of blog posts and conference talks that my friend Mercedes Bernard gave called "Fun, Friendly Computer Science," that was aimed towards people who didn't have a formal CS background to give them a vocabulary or some exposure to computer science concepts that would be helpful in day to day programming work. And one thing that stood out to me was the idea of set theory and how working with relational databases is pretty much working with set theory, even if you don't use that vocabulary or reference those underlying concepts. I think another aspect of these theoretical fundamentals that companies might interview people on, like algorithms or data structures, there's also a lot of talk about how those aren't part of your day-to-day jobs. And yes, knowing about them is useful, but the benefits of working in an existing programming language is that those have all been figured out for you. And you are just using those data structures and have to worry a bit less about how they are working under the hood. That's not to say you should know nothing about them, but I think I had mentioned earlier maybe it's helpful to understand things at a lower level than what you're working with. And that can come up when you run into problems that those data structures aren't quite able to help you solve, and you need something different, or you need to be a little more creative. But I would say that almost all of the time, you have the luxury of not having to think about that. JOËL: It's interesting you mentioned set theory because I was thinking of a set theory metaphor here, which is we have a set of things, which is what a traditional computer science degree will teach you. We have a set of things that are the quote, unquote, "fundamentals." And there's definitely an intersection between those two sets, but they don't totally overlap over each other. And so there are some things in a computer science degree that are absolutely going to be fundamentals that you need to use and that you're going to use in your day-to-day job. You don't have to learn them through CS. You can learn them from all sorts of other sources. And then there are also some things in CS that are maybe not part of the fundamentals. All knowledge has value. And so these things can be mental models, or they can connect to other things. But they're not necessarily fundamental to you being able to do a good job as a working developer out in the world. And again, this will vary a lot depending on the type of development that you're doing. I'm mostly thinking of web development because that's what you and I do, both front end and back end. I want to come back to something that you mentioned earlier because I feel like when everybody thinks of the fundamentals of computer science, the first thing that comes to mind are data structures and algorithms. Those are the things that you're working on when you're doing leet code. They are the kind of things you get asked on interviews. It's the kind of thing that's kind of fun to show off to other people. And it sounds like you're saying that data structures and algorithms are actually kind of overrated; that's a hot take. STEPHANIE: I think it's overrated if you are working in web development. Like we were talking about earlier, at that level of abstraction, you're using the tools of the language to build software that works for your users. Like, I am really not thinking all that much about how to implement a linked list or something like that. [laughs] I have my trusty hash in Ruby. I can use an array if I need to and just put my data in there, and that is perfectly fine and acceptable. And I have not really needed to do anything too fancy beyond that. In fact, I think you and I have talked a lot on this podcast about paradigms and design patterns. And those are the things that I find really interesting and want to learn more about at this point in my career and because they're more relevant to my day-to-day work. And I think we should be interviewed on the work that we will be doing. JOËL: I think that lines up a lot with my experience as well. I have had to implement some trees, some linked lists, and things occasionally throughout time. I think especially working in Elm, sometimes is a little bit more lower-level data structures to work with or to construct. And sometimes you might need that to know some basics around things like trees if you're operating over the DOM, which is a tree, things like that. But, again, a lot of those things are already pre-built for you. So having the 10-minute version might be good enough to get what you need to do. I think one thing that's probably the most useful thing that I would pull out of an algorithms class is the concept of a binary search, not just literally how do I implement a binary search on an array or a linked list but the idea of it and then taking that and applying it to a very broad set of problems. And a classic one is when you're debugging, and there are all sorts of ways that your program might fail. And if you are looking at it just process of elimination, just one little thing at a time, it's going to take you forever to check every possible cause. But if you can find a way to eliminate half of the possibilities, and that might be by putting a conditional high in your decision tree, or there are a lot of different ways you can do that, all of a sudden, it makes it much easier to narrow down your search and to find a bug. And so that is a technique that I think is just hugely valuable that you learn in an algorithms class, but that can be generalized to all sorts of problems. I'm curious, in writing in Ruby, or JavaScript, or any of the web languages that we tend to write in, have you ever had to calculate the big O of a method or function you've written? STEPHANIE: Only in the context of performance and Rails performance. The only times I think I've ever really pulled it out is when I am seeing a database query that is O of n or worse, and then I rewrite the function to avoid that inefficiency. Otherwise, I think most functions are perfectly fine, and there's no need to really optimize for that the first time around. Though, I am going to plug another conference talk that I watched recently from Jemma Issroff and Jacob Evelyn about their developing of a gem called MemoWise which involves memoization and caching. But they did a really cool job of deep diving into the source code of their gem to make things as efficient as possible. And that did involve investigating different O notations and stuff like that. 111 JOËL: Yeah, I found that in practice, most performance bottlenecks on the web tend to be I/O bound rather than CPU bound. I just realized I threw out some fancy technical terms that you probably would learn in a CS degree, and that might feel confusing for those who don't have that background. So that means that your problem is slow. It's waiting on, usually, some sort of network or file system, or database, or something like that rather than waiting for processing speed. As an aside, we've talked about the value of having specialized vocabulary and names to add to problems. So that is a value that you get out of a more formal education path is that you do learn some of those technical terms. And that can sometimes help you to build a mental model of the solutions you can apply to a problem. STEPHANIE: I might have mentioned it in that episode, but I do think I learned best, having had to wrestle with something in my personal life and experience and then going out and seeking more information about it and learning about it. And at that point, it's much more interesting to me because I can relate it to something that is in front of me as opposed to reading a textbook and trying to imagine ways that this information would be useful. A lot of these concepts, it's totally okay to go explore them once you need them. You're right that it is tough if you have no idea where to even begin or what to search for, or what to look for. But I don't know; I think maybe I'm just being efficient with my time this way. [laughs] JOËL: I'd like to throw a metaphor at you that you kind of introduced earlier when you were talking about Slack and how you're trying to change from a push to a pull mode, and I think this can apply to learning as well. Any sort of push approach to learning, you're kind of pre-learning some things because you think they're going to be useful or they might power some more learning. And it's going to be good to have that sort of already there in the situation where you need it. Then that might be going to do a four-year degree, or maybe that's just saying, this year, I want to learn a little bit of this theoretical idea to build some better understanding of the quote, unquote, "fundamentals." And that could just be sort of general continuing education that you do. But sometimes, like you said, it's just in time. You say until I encounter a problem, it's like, okay, this problem is slow. I don't know a whole lot about performance. Let me go read up about performance. And then you get to be like, oh, the first question you ask is, is your problem I/O bound or CPU bound? What does that mean? Okay, now there are different strategies for how you deal with things and different analysis tools. And then you go and learn that at that moment rather than having learned it the summer before because you just were trying to fill out a sort of broader foundation for your knowledge. STEPHANIE: Wow. Excellent callback. Again, only you can find multiple ways to reference something [laughs] I said earlier. I also really enjoy listening to someone who's an expert at something or particularly knowledgeable talk about something that they're excited about. And so I was thinking that I don't have as robust of a computer science education as some of my peers or coworkers, but I know that I have people to go to with my problems. Like you, for example, you might pull out, oh, this reminds me of graph theory. [laughs] I know we've talked about dependency graphs a lot on this podcast. And, in some ways, I am absorbing that education through you. And maybe in the future, I will encounter something that reminds me of a conversation we had, and I have a starting place. So I think having people with diverse backgrounds in this field can be really valuable as well. JOËL: I love that because that means that even in your day-to-day, there's kind of a sort of mix of push and pull that's happening. You might just be having a conversation with somebody, and they're really excited about dependency graphs, and they tell you why they're excited about it. And that's maybe a little bit more of a push because you don't immediately need it, but you're gathering some knowledge. But then you might also be encountering a problem on a client, and then you ask in our dev channel, "Hey, I'm encountering this sort of problem. What should I do?" And somebody says, "Oh, you might want to look into calculating the big O of this function because that looks suspicious. Tell me about that." STEPHANIE: Exactly. And now it's my turn to call back to my Slack anecdote earlier because I do think in this field, there's just an infinite amount of things to learn. And I do have to accept that I'm not going to learn everything. And I have found a way that works for me, you know, that combination of, oh, here's a problem I'm facing. And I really need to find out what is going on in this C code so I can better understand this Ruby code I'm writing or something like that. Or people sharing different insights that they have, and I'm getting that information that way. And you said it earlier that however you receive this information or get this education, there's no one way to do it. There's no one correct way. JOËL: And I think everybody does a mix of both, right? You've mentioned several times that you had attended a conference talk, or read a book, or read an article on a topic related to more theoretical underpinnings. And I'm pretty sure you weren't going to that talk because you had a problem that needed to be solved, and you're like, oh, if only I could get the answer, this is where I'll get it. It's probably a little bit more in preparation, saying, oh, I'm at a conference. The whole point of a conference is to get some information ahead of time. And this particular topic sounds like it would be helpful. Does that sound right? STEPHANIE: Yeah, that is a really great way of putting it. I hadn't thought of it that way. But that also kind of checks off the box of listening to someone else explain things to me [laughs] that they've already done a lot of research on and feel excited enough to share with the world. And that is inherently more interesting to me than reading a textbook. JOËL: Oh yeah. Textbooks are boring. We'd done a whole episode recently about where to focus our learning. So I think if listeners are interested in digging deeper into that and maybe the push versus the pull, there are a lot of great thoughts there as well. STEPHANIE: So before we wrap up, are there any underrated quote, unquote, "fundamental" computer science topics or concepts that you think are particularly valuable to you and your work as a developer? JOËL: I would like to plug discrete math as a topic. And I know we've talked about, oh, there are some theoretical ideas that are maybe very firmly in the theoretical realm and aren't that useful in day-to-day work, and math sounds like it would be in that branch. But discrete math is basically all the practical math that is useful to you as a developer. It's kind of a mishmash of 10 different subjects. So it's a bit of an overview of here's an intro to Boolean algebra. Here's an intro to propositional logic. Here's an intro to predicate logic. Let's talk about set theory. Let's talk about combinatorics. Let's talk about recursive functions from a mathematical perspective. Let's talk about a little bit of graph theory. So it just touches on a bunch of these topics, and they're all generally quite useful. I find things like Boolean algebra I use absolutely every day because writing Boolean expressions is a thing that we do all the time in our code. And you might think there's not that much to doing Boolean expressions. And you might even have picked up on some of the patterns by yourself just by doing the work long enough. But there are some really interesting laws and rules that can be applied and analysis techniques that, even in just the small portion of a course dedicated to that topic, you get a lot of value out of it. So I would recommend either digging into some of these topics a little bit on your own, so digging a little bit into Boolean algebra, digging a little bit into set theory, or digging into discrete math as a whole, sort of looking at all the different little sections together. I think that really gives you a lot of tools to improve your day-to-day work. STEPHANIE: That was a great sell on discrete math. And who knows? Maybe you've influenced some of our listeners to go check that out. On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thank you so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeee!!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Stephanie shares that she's been taking an intro to basket weaving class at a local art studio, and it's an interesting connection to computer science. Joël eats honeycomb live on air and shares a video that former Bike Shed host Steph Viccari found from Ian Anderson. It's a parody to the tune of "All I Want For Christmas Is You," but it's all about the Ruby 3.2 release. In this episode, Stephanie and Joël shift away from literature and lean into art. Writing code is technical work, but in many ways, it's also aesthetic work. It's a work of art. How do you feel about expressing yourself creatively through your code? This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Weaving, Computing, and the Jacquard Loom (https://www.scienceandindustrymuseum.org.uk/objects-and-stories/jacquard-loom) Ian Anderson's Ruby Christmas song (https://www.instagram.com/reel/CmAxL_ZNMOa/?igshid=YmMyMTA2M2Y%3D) Dan McKinley's Boring Technology Club slides (https://boringtechnology.club/) Simple English Wikipedia (https://simple.wikipedia.org/wiki/Main_Page) Geepaw Hill's Twitter thread about levels of thinking (https://twitter.com/GeePawHill/status/1565389543628480518) Julia Evans's debugging puzzles (https://mysteries.wizardzines.com/) Tomorrow, and Tomorrow, and Tomorrow by Gabrielle Zevin (https://bookshop.org/p/books/tomorrow-and-tomorrow-and-tomorrow-gabrielle-zevin/17502475) Transcript: AD: thoughtbot is thrilled to announce our own incubator launching this year. If you are a non-technical founding team with a business idea that involves a web or mobile app, we encourage you to apply for our eight-week program. We'll help you move forward with confidence in your team, your product vision, and a roadmap for getting you there. Learn more and apply at tbot.io/incubator. JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way. JOËL: So, Stephanie, what's new in your world? STEPHANIE: I'm really excited to share that I've been taking this intro to weaving class at a local art studio. I'm actually a few weeks in, and it's wrapping up soon. But one thing that I found really cool at the very first class was that the instructor mentioned that weaving was, in some ways, a predecessor or inspiration to modern computing. And he said that, and I got really excited because surely that meant that I would be good at this thing [laughs] and this craft, and then I promptly kind of forgot about it. But I was inspired the other night to look up this history to just learn more about weaving and its connection to computer science. And I learned that, in particular, the invention of something called the Jacquard loom really led to early computing machines because, basically, weaving involves threading horizontal and vertical fibers. And the way you do it if you thread the horizontal fiber, also called the weft, over or under the vertical fibers, called the warp, you get different patterns. And so with the Jacquard loom, this invention utilized punch cards as instructions for basically binary code, and that would tell the loom how to raise and lower those vertical threads, which would then lead to a beautiful pattern. And after that invention, this previously very laborious process became automated. And that also had a really big impact on the textile industry. And fabric became a lot more available at a much lower cost. So that was a really cool little history lesson for me. JOËL: That is really cool. So are you saying that punch cards, as we know them from early computing, were borrowed as a concept from the weaving industry? STEPHANIE: Yeah, that's at least what I've read. I can see now how complex weaving tapestries and patterns set the stage for more complex computations. And I don't know if I'm going to keep going down this weaving journey. I liked the intro class because it was very chill, and I got to use my hands. And I had a little bit of fun making, I don't know, like ten by 12-inch little tapestry. But yeah, I've definitely seen other more advanced weavers make really beautiful textiles and fiber arts. And it's really cool to see the application of that detail-oriented skill in different formats. JOËL: Are you going to try to make your own punch cards? STEPHANIE: That's an interesting evolution of this skill [laughs] for sure. I think what I really did like was the hands-on approach. And so the punch cards did make this process automated. But I personally enjoyed the switching of the threads and pulling them through and doing it with my hands instead of something that's kind of turned into automated machine work. Does that inspire you in some way? JOËL: I think sometimes it's interesting, right? As software people, we sort of have the two urges. We work in so much automation. When we see a process, we would love to try to automate it ourselves, even if it's been done before. So, oh, could I build a small, automatic mechanical loom using punch cards? That sounds like a fun automation challenge. At the same time, so much of my daily job is automation that sometimes it's nice to kind of remove automation entirely from the picture and, like you said, just work with your hands. STEPHANIE: That's a really interesting way to think about it. I do believe that people have different reactions to it, like you said, where they're like, "Wow, I can use my skills to do this really cool thing." On the other hand, you might also respond with, "Wow, I've done this automation code-writing work for eight hours. So now I really want to do something completely different." And I think that's the camp that I was in, at least when I first signed up for this class, just having space, like three hours a week, to sit and not look at a computer and deal with the physical realm. JOËL: So here's the other route that I think a lot of software people take, and that is, here's a fun mechanical process that can be automated. What if we simulated it virtually? So what if I create a program where you can sort of create your own punch card, like, decide where you want to punch the holes? And maybe these are just radio buttons or something or checkboxes in a grid on a webpage. And then, the program will output an SVG that is the thing that would have been woven if you'd used it in that pattern. And so now you can kind of play around with, like, huh, what if I punch here? What if I unpunch here? And you get all these patterns out, and you could just get to try it around. STEPHANIE: That's fascinating. I can't believe your brain went there. [laughter] But yeah, the idea that it's not actually about the pattern itself but the holes that you make, that part being the creative process and then what comes out of it then being a bit of a surprise or just something organic that's a really interesting take too. JOËL: Something that I find is really fun about software and things created from software is this sort of really short feedback loop in terms of trial and error. So if you were actually having a weaving machine and you made a physical punch card, and then you try something, and you realize it's not quite right, the machine weaved something you didn't quite like, now you've got to set it up again. You probably have to start from scratch with a new punch card because you can't really unpunch holes unless maybe you can put tape over it or something. That trial-and-error feedback loop is much shorter. Whereas with a program, you just pause the simulation, punch-unpunch some holes, restart, and then you just kind of keep trying. And there's something fun about that creative exploration when you've got that really tight feedback loop. STEPHANIE: That's fair. I think perhaps that actually might be why doing it manually, and by it, I mean weaving, gives you a little bit more room to [laughs] debug if you will, because you can see when something goes wrong. And this actually happened to me in class earlier this week where I didn't thread the fiber over instead of under. And I was like, oh, this doesn't look right. Like, that's not the look I'm going for. And then I could kind of quickly see, oh, I missed a thread over here and unravel and do it again. Whereas what you just described, if the punch card is wrong and then you create this big piece of fabric, at that point, I'm not really sure what happens then. If someone out there is a weaving expert and knows the answer; I would be very curious to know. JOËL: Now I kind of wish we'd had this conversation last month because, in early January, there was a game jam event that happened. It's a yearly or biyearly Historically Accurate Game Jam, and they select a theme, and then everybody has to submit a game, or a simulation, or something, an interactive program that fits with the theme. And this year's theme was the Industrial Revolution. And I feel like simulating an old automated loom with punch cards would be the perfect fit for something that's small enough that I could build it in a week without spending 10 hours a day working on it. It fits within the theme, and it's still kind of fun. STEPHANIE: Wow, that would have been a really great idea. If there was an award for best fitting the theme, I think that would have won because then you're also tackling the history of computing. I was talking about earlier the loom obviously being...or the automated loom also really playing a big role in the Industrial Revolution. And, I don't know, maybe this is our future club, Joël, and we're going to get into video game development. [laughs] What's new in your world, Joël? JOËL: There are two things. One is that today former Bike Shed host, Stephanie Viccari, shared a video with me from Ian Anderson. This was made last December to the tune of All I Want For Christmas Is You. But it's all about the, at that time, upcoming Ruby 3.2 release. It is amazing. The lyrics talk about the different features that are upcoming. It rhymes. It's set to meter. I am just blown away by this. And I'm just really hyped [laughs] about this video. STEPHANIE: You sent it to me and I gave it a watch before we sat down to record, and I also loved this video. It was so fun. And I think Ruby has a bit of a tradition of releasing new versions around Christmas time. So if this became a tradition, that would be very fun, and maybe instead of singing Christmas carols, we'll be singing new Ruby version carols around the holidays. JOËL: I feel like if Ian wants to do another one next Christmas, now that you have the precedent, it'd be a great space to try something to the tune of Last Christmas because now you can reference back last year's song. STEPHANIE: Yeah. I might as well just go all in and create a whole Christmas album of Ruby anticipation carols. [laughter] JOËL: Yeah, really excited about that. Kudos to Ian. And for all of our listeners, we'll link the video on the show notes of the podcast. Go and check it out; it is worth the two and a half-minutes of your life. STEPHANIE: Agreed. JOËL: The other cool thing, for the past few episodes, we've been talking a lot about hexagons and how they show up in nature, and bees, and how they build their honeycombs and whether that is sort of by design or sort of just happens by nature through sort of external forces. And so this week, I went out to the store, and I bought some real honeycomb. And I'm going to try it on air. STEPHANIE: [laughs] Oh my gosh, I didn't realize that's what was happening. [laughter] Okay, I'm ready. JOËL: All right, I'm going to take a slice. STEPHANIE: Wow. For research. JOËL: For science. STEPHANIE: Wow, that is a big bite. [laughs] JOËL: Hmmm, it's basically crunchy honey. STEPHANIE: So I've enjoyed honeycomb in that raw form on ice cream. I really like it on there and oatmeal and stuff like that. I think it's a little bit waxy. Like, once you get to chewing the bits at the end, that part is a bit of a less pleasant mouth-feel [laughs] in my opinion. What are you experiencing right now? JOËL: Yeah, so like you're saying, the honey kind of dissolves away in your mouth. You had this really fun mix of textures. But then, in the end, you do end up with a ball of [laughter] beeswax in your mouth. STEPHANIE: Oh no. JOËL: Which I understand is completely safe to eat, so... STEPHANIE: Yeah, that's true. JOËL: I'm just going to eat the whole thing. STEPHANIE: I think it's kind of like swallowing gum. [laughs] JOËL: Which apparently does not last for seven years in your digestive system; that's a myth. STEPHANIE: Wow, debunking myths, trying honeycomb. You're welcome, to all The Bike Shed listeners out there. Investigating the important things. JOËL: What is interesting is that we're talking about the structural power of hexagons. I can cut a pretty thin slice of the comb, and it doesn't fall apart. It still has a lot of strength to it, which is nice because it means that the honey doesn't just go splashing everywhere. I can cut up a fairly thin slice, pick it up, it still holds the honey, put it in my mouth, and it doesn't make a mess. STEPHANIE: The bees know what they're doing. [laughs] Cool. Would you eat raw honeycomb again? JOËL: Well, I got a whole block, and I had one tiny slice. So, yes, I will be eating the rest of this. STEPHANIE: [laughs] JOËL: I don't think this will be a regular thing in my weekly groceries. But I would bring this out again for a special occasion. Or I can see this fitting nicely, like you said, on maybe certain breakfasts, even on a charcuterie board or something. STEPHANIE: Oh yeah, that's a really good use for it. JOËL: In some ways, it's nice because it's a way to have honey without having to have it on something else or having to eat it with a spoon. It's honey that comes with its own carrying vessel. STEPHANIE: That's great. Yeah, like a bread bowl for soup. [laughs] JOËL: Exactly. Bees make their own bread bowls for honey. STEPHANIE: [laughs] MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: So, for the last couple of weeks, we've been joking that this is turning into the Stephanie and Joël book club because we've been talking about a lot of articles and books. Today, I'd like to shift a little bit away from literature and lean into art. Writing code is a technical work, but in many ways, it's also an aesthetic work. It's a work of art. How do you feel about the idea of expressing yourself creatively through your code? STEPHANIE: So this is interesting to me because it's actually quite different from what we've been talking about in recent episodes around the idea of writing sustainable code, code for other people to read. Because if you are writing code purely for creative expression and just for yourself, that will look very different than what I think folks have kind of called boring technology, which is choosing the patterns, the tools, the frameworks that are tried and true, and just kind of sticking to the things that people have solved before. And so, in some ways, I don't know if I really get to express myself creatively in the code that I write, which I think is okay for me because I don't really consider myself someone who needs a creative outlet in my work. What about you? What thoughts do you have about this? JOËL: I think it's interesting the way you described it. I'm almost wondering if I'm making maybe a comparison to physical architecture; maybe you almost have a sort of brutalist perspective on the things you construct. STEPHANIE: [laughs] JOËL: So they're functional. They're minimal. They are not always the prettiest to look at, but they're solid. Does that metaphor sound about right to you? STEPHANIE: I feel like I have to make a pun about SOLID, the design patterns, and code. JOËL: Ooh. STEPHANIE: [laughs] But I think I like brutalist, I mean, the term itself. I don't know if I necessarily identify with it in terms of my work and output. But the idea that the code that I do is functional is, I think, particularly important to me as a developer. And I don't just mean, like, oh, the code works, so it's done, but functional for whatever need I'm solving and also for the people who are working with this code again in the future. I mentioned boring technology. There's a talk that I'm kind of referencing by Dan McKinley, and you can check out his slides at boringtechnology.club. And he talks about this idea of decision-making and how that relates to writing boring or creative code. And he also references Maslow's hierarchy of needs. And so, ideally, if you're working in an existing codebase, all the low-level decisions have been made for you. And then you can kind of traverse the hierarchy and focus your creativity on the high-level problems that you're trying to solve. So maybe you're not necessarily expressing your creativity in the syntax or whatever pattern you're using, again, because a lot of those things have been solved. But where the creativity comes from is the particular domain or business problem you have and the real-world constraints that you're faced with. And how do you figure out what to do given those constraints? JOËL: I think that lines up a lot with my own experience as well. I think as a newer developer, syntax is sort of the thing that's top of mind. And so, maybe trying to get clever with syntax is something that I would focus on more. Sometimes that's trying to get code really short and terse. Sometimes it's because I want to try. Can I do this thing with a particular piece of syntax, or even just does it look pretty? I think now, in my code, I am actually kind of boring with my syntax. I, probably when I write Ruby, mostly use a kind of slimmed-down set of syntax and don't use the full expressive power of the language for most of my day-to-day needs. So basic things with objects, and methods, and blocks, sort of the basic building blocks that we get from Ruby regular conditionals, if...else, and a few other nice things that the language gives us. But, in many ways, it almost feels like...I don't know if you've ever seen the simplified English Wikipedia. STEPHANIE: No, I haven't. What is that? JOËL: They're treating it, I think, like a separate language, but it is a version of Wikipedia in English with a more restricted vocabulary to try to make the content more accessible to those that might struggle with more standard English. So it's a sort of smaller subset of English. And, in many ways, I feel like a lot of the day-to-day Ruby code that I write is simplified, Ruby. STEPHANIE: Wow, that's really interesting. I think this also goes back to the specialized vocabulary episode we talked about. And is there value in keeping things accessible, and straightforward, and boring but at the cost of being able to express yourself with everything you have available to you? This is a bit of a tangent, I guess, but I grew up speaking Chinese with my parents, but since then, I have really lost a lot of that vocabulary. And, in some ways, I really struggle with communicating in Chinese because I feel like I'm not able to express myself exactly the way I want to in the way that I can in English. And when I'm talking to my parents, yeah, that's been a bit of a challenge for me because I do really value being able to say things the way that I mean, and I'm not able to have that with my limited vocabulary. So I can also see how people might not enjoy working within these confines of boring syntax and boring frameworks. JOËL: Sometimes it's nice to give yourself a sort of syntactical restriction, but they're very low-level when it comes to most of what we do for programming. And I think that's sort of what I've learned as my career has evolved is that programming is so much more than just learning syntax. So kind of like with art, maybe it's nice to restrict yourself to say, oh, can I do something with only a particular brushstroke technique, or restricting myself to a particular palette or a particular medium? And that can foster a lot of creativity. So, similarly, I think you could do some things like playing Code Golf, not on production code; please don't. STEPHANIE: [laughs] JOËL: But as an experiment in a side project or just almost as a piece of art, that can be a really interesting problem to solve and give you a deeper understanding of the language. And I'm sure there are plenty of other syntactical limitations you could put on yourself or maybe fancy things you would like to explore and say, "Well, this is over the top. We don't need to structure it in this way or use this syntax. But I want to sort of push the boundaries of what can be done with it. Let's see where I can take it." STEPHANIE: That's really fair. And I think it relates back to what I was saying earlier about perhaps creativity when writing software products comes from the constraints of the business of, in some ways, physical aspects of development. In the Dan McKinley talk, I mentioned about choosing boring technology. He generally recommends against bringing in a new language or framework because of the costs, the carrying cost of doing that, and the long-term maintenance to consider. But he instead suggests turning the question on its head and being like, how can we solve this problem with the current technology that we do have? And I think that relates to what you were saying about being able to push the boundaries of a particular medium or tool and in a way that you might not have considered before. JOËL: Exactly. And I think going back to the analogy with art; sometimes it is nice to restrict yourself to a particular brushstroke or something like that to try to foster creativity. But oftentimes, you want to explore creativity in much higher-level ways. So maybe you're not restricting things like brushstrokes and color, and, instead, you want to explore lighting. You want to explore maybe certain ways of mixing colors. There are all sorts of, I think, higher-level ways that you can be creative in art that's not just the mechanics of how you apply pigment to canvas. And we see the same thing like you were saying, in code where there's a lot of higher level business problems. Generally, how do we want to structure large chunks of the code? How do we want to build abstractions? Although that can also be a dangerous place to get too creative in. STEPHANIE: Yeah, absolutely. Do you consider yourself a creative person or need a creative outlet? And how does writing code or software development play a role in that for you? JOËL: I would say, yes, I consider myself a creative person. And I would consider coding, in general, to be a creative endeavor. I sometimes describe to people that writing code is like building something out of infinite legos. You're constrained only by the power of your imagination and the amount of time you're willing to put into constructing the thing that you're building. Of course, then you have all sorts of business constraints. And there are things you want to do on a work project that are probably not the same as what you would want to do on a client project or on a personal project. But there's still creativity, I think, at every level and sometimes even outside of the code itself. Just understanding and breaking down the business problem can require a ton of creativity before you even write a single line of code in your editor. I was reading a Twitter thread the other day by @GeePawHill that sort of proposes that there are sort of four steps in evolution of kind of the mindset that programmers go through over their career. And I'd be curious to hear your thoughts on this evolution if you kind of agree with it or disagree with it if that maybe lines up with some of your experience. So this Twitter thread proposes four levels of thinking that we go through. I think we can kind of jump between these levels at various points in our work. So we might do all of these in a day, but to a certain extent, they also follow a little bit of a progression in our career. So the first level is thinking in terms of syntax; that's just knowing the characters to type in the editor. The second level is thinking in terms of code, that's, thinking a little bit more semantically. So now, instead of thinking, oh, do I need if then curly brace, then closed curly brace? Now we're thinking more in terms of, okay, I need a branch in the flow of control for my logic here. And at that level, maybe you don't even need to think about the syntax quite so much because you're so comfortable with. It kind of just fades away. Building beyond that, now you're thinking in terms of your paradigm. So Ruby is an object-oriented language, so you might be thinking in terms of what objects do I need to represent this problem and how do they need to talk to each other? And the sort of underlying semantics of, oh, do I need a conditional here or not? Those might start fading away because now you're thinking at a slightly higher level. And then, finally, thinking in terms of change sets. Now you're thinking less in terms of the language itself and more in terms of the business problems and how the current behavior of the software is different and needs to change to get to where we want the behavior to be. STEPHANIE: I think I disagree a little bit with the idea that it's a progression. And I'm thinking about how when you have a beginner's mind, anything is possible. And in some ways, if you are new to coding, before you have that understanding of what is and isn't possible, anything is possible. And so, in some ways, I've worked with people who are super new to coding, and the ideas that they come up with for how to make a change at that highest level that you were just describing, in some ways, make sense. You can be like, oh yeah, that actually is something we can do and an idea that you might eventually get to from someone more experienced, having followed those different levels of progression and reaching a place where you're like, I know exactly what tools or the details about how to do this. But when you have that beginner's mind, and you don't have the details of the how, I think you can still think about those problems at a higher level, and that is valuable, and maybe they'll need help implementing along the way. And I think that that could be a really interesting area of collaboration that perhaps we don't do enough in this industry because it's very mentorship-focused where it's like, okay, I have more experience, and so I'm going to teach you what I know. Whereas if you bring someone with a totally fresh perspective along, what ideas can you generate from there? JOËL: I think we definitely exist in all of these layers every day as developers. I think, looking back at myself as a newer developer, I tended to maybe work bottom-up when I tried to solve a problem. And I think that now I probably tend to work sort of in the reverse order, start by thinking in terms of changes and then work my way down. And so syntax, at that point, is the last thing that I'm thinking about. It's really an implementation detail. Whereas I think as a new coder, syntax was super important. Was your experience similar to that, or did you have a very different journey? STEPHANIE: It's funny that you mentioned it because I think when I was new to development, there were so many syntactic things that I didn't understand that I just kind of like blurted out of my brain when I was reading code and was then trying to latch on to the important pieces of information that I needed to know, which often meant class names or method names. Pieces that I could grab onto and be like, okay, I'm seeing that this method then calls this other method or whatever. And, yeah, what you were saying about implementation details falling away, I kind of did that at the beginning of my career a little bit, at least at that syntactic level. So, yeah, I think I'm with you where we all exist at different parts of this framework, I suppose. And that journey could look different for everyone. JOËL: So we're talking about ways to be creative at higher levels. And one way that I find has been really fun for me but also really useful has been bringing in dependency graphs as a tool for design. You knew I had to mention dependency graphs. STEPHANIE: We got there in the end. [laughter] Cool, go on. JOËL: I think it's been really good sometimes in terms of modeling change sets because dependency graphs can be a great tool for that, but also sometimes in terms of trying to understand what the underlying business problem is and how it might translate into code structures where things might be tightly coupled versus not. And so, drawing it out visually is a really powerful design tool. And because now I can look at it in two-dimensional space, I can realize, oh, I see something that feels like it's maybe an anti-pattern or might be a problem here. There's a cycle in my graph; maybe we should find a way to break that. Maybe we need to introduce some dependency inversion and break that cycle, and now our graph is acyclic. And so I think that's where there can be a lot of creativity that happens, even when you're not writing code at that point. You're just sort of talking about how different pieces of the project or even different subproblems...you're not even talking about if they're implemented in code, but just saying this subproblem is related to this subproblem, and maybe I would like to find a way for them to not have a connection to each other. STEPHANIE: I'm glad we got back to this dependency graph topic because I stumbled upon something that I'm curious to hear your opinion on. I have been following Julia Evans' work for a little bit now. And she recently released a new zine about debugging. And at the end of the zine, she includes a link to these choose-your-own adventure puzzles that she has created, specifically to teach you about debugging and how to do it. And so it's basically a little detective game, and you kind of follow along with this bug. And she gives you some different options about how would you like to find a little bit more information about this bug? And what approach would you take? And you make some different selections, and then as you go, you get more information about the bug. And that helps inform what next steps you might take. And, one, I think this is a great example of a creative project about software development, even though it's not necessarily your day-to-day work. But then she also uses a tool called Twine, which is for creating non-linear stories, or puzzles, or games. And it got me really thinking about the multi-step wizard we've been talking about and this idea of looking at a problem in different mediums. It also reminds me of if you have a designer on your team and they're doing prototyping, they usually have some kind of user interactivity that they have to codify. And they are making those decisions about okay, like, if you are at this step, then where do you go next? And those are all things that you've talked about doing as a developer, I think, at a later point in the future lifecycle. And I'm now just kind of thinking about how to integrate some of that into our workflow. Do you have any thoughts about that? JOËL: I had one of the coolest experiences in my career when I was doing a front-end project where we were building a typeahead component that was pulling data from a remote server and then populating a drop-down. And the designer and I sat down and just started to look through all the different states that you could be and how you could move from one to another. So it looked like maybe you start the typeahead is empty; it's just a text box. And then as you start typing, maybe there's a spinner that shows up. And then maybe you have some results, or maybe you don't have results. And those are two different entirely states that you could be in. And then, if you backspace, what happens? And what if something goes wrong on the server? Like, we just kept finding all these edge cases. And we built out a diagram of all the possible journeys that someone could take, starting from that empty text box, all the way to either some sort of error state or a final state where you've selected an item. But, of course, these are not necessarily terminal because in an error state, maybe you can just start typing again, and you sort of jump back into the beginning of the flow. So we did this whole diagram that ended up looking very much like a finite-state machine. We didn't use the term, but that's kind of what it ended up being. And I think we both learned a lot about the problem we were trying to solve and the user experience we were trying to create through that. There was just a lot of back and forth of, like, oh, did you think about what would happen if we get no results here? Have we thought about that state? Or it's like, okay, so now we're in an error state. What do we do? Is there a way to get out of it, or are we just kind of stuck? Oh, you can backspace. Okay, what happens then? STEPHANIE: Yeah, I mean, we've been talking about creativity as a solitary process. But I think that that goes to show that when collaborating with other people, too, that process can also be very fun and creative and fulfill that need outside of the way the code is written. JOËL: In many ways, I think working with somebody else, and that gets made at the intersection of two or more people's work, is probably the most creative way to build software. STEPHANIE: That actually reminds me of a book I read last year called "Tomorrow, and Tomorrow, and Tomorrow." And it's about these two friends and their journey creating video games together. And it kind of follows several decades of their life and their relationship, and their creative and collaborative process. And I really loved that book. It was very good, especially if you like video games. There are a lot of great references to that too. But I think what you were saying about that fulfillment that you can get with working with other people, and that book does a really good job examining that and getting into our need as humans for that type of collaboration. So that's my little book rec. It goes back to our conversation about designing a game. Again, maybe this is [laughs] what we'll do next. Who knows? The world's our oyster. On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thank you so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeee!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
Joël has been pondering another tool for thought from Maggie Appleton: diagramming. What does drawing complex things reveal? Stephanie has updates on how Soup Group went, plus a clarification from last week's episode re: hexagons and tessellation. They also share the top most impactful articles they read in 2022. This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Maggie Appleton tools for thought (https://maggieappleton.com/tools-for-thought) Squint test (https://www.youtube.com/watch?v=8bZh5LMaSmE&themeRefresh=1) Cardinality of types (https://guide.elm-lang.org/appendix/types_as_sets.html) Honeycomb hexagon construction (https://www.nature.com/articles/srep28341) Coachability (https://cate.blog/2021/02/22/coachability/) Strangler Fig Pattern (https://shopify.engineering/refactoring-legacy-code-strangler-fig-pattern) Finding time to refactor (https://thoughtbot.com/blog/finding-the-time-to-refactor) Parse don't validate (https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/) Errors cluster around boundaries (https://thoughtbot.com/blog/debugging-at-the-boundaries) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot that has basically become a two-person book club between me and Joël. [laughter] JOËL: I love that. STEPHANIE: I'm so sorry, I had to. I think we've been sharing so many things we've been reading in the past couple of episodes, and I've been loving it. I think it's a lot of the conversations we have off-air too, and now we're just bringing it on on-air. And I am going to lean into it. [laughs] JOËL: I like it. STEPHANIE: So, Joël, what's new in your world? JOËL: So, in a recent episode, I think it was two episodes ago, you shared an article by Maggie Appleton about tools for thought. And I've kind of been going back to that article a few times in the past few weeks. And I feel like I always see something new. And one tool for thought that Maggie explicitly mentions in the article is diagramming, and that's something that we've used as an industry for a long time to deal with conditional logic is just writing a flow diagram. And I feel like that's such a useful tool sometimes to move away from code and text into visuals and draw your problem rather than write your problem. It's often useful either when I'm trying to figure out how to structure some of my own code or when I'm reviewing a PR for somebody else, and something just feels not quite right, but I'm not quite sure what I want to say. And so drawing the problem all of a sudden might give me some insights, might help me identify why does something feel off about this code that I can't quite put into words? STEPHANIE: What does drawing complex things reveal for you? Is there a time where you were able to see something that you hadn't seen before? JOËL: One thing I think it can make more obvious is the shape of the problem. When we describe a problem in words, sometimes there's a sense of like, okay, there are two main paths through this problem or something. And then when we do our code, we try to make it DRY, and we try all these things. And it's really hard to see the flow of logic. And we might actually have way more paths through our code than are actually needed by the initial problem definition. I think we talked about this in a past episode as well, structuring a multi-step form or a wizard. And oftentimes, that is structured way more complex than it needs to be. And you can really see that difference when you draw out a flow diagram, the difference between forcing everything down a single linear flow with a bunch of little independent conditions versus branching up front three or four or five ways, however many steps you have. And then, from there, it's just executing code. STEPHANIE: I have two thoughts here. Firstly, it's very tragic that this is an audio medium only [laughs] and not also a visual one. Because I think we've joked in the past about when we've, you know, talked about complex problems and branching conditionals and stuff like that, like, oh, like, if only we could show a visual representation to our listeners. [laughs] And secondly, now that makes a lot more sense why there are so many whiteboards just hanging out in offices everywhere. [laughs] JOËL: We should use them more. It's interesting you mentioned the limitations of an audio format that we have. But even just describing the problem in an audio format is different than implementing it in code. So if I were to describe a problem to you that says, oh, we have a multi-step form that has three different steps to it, in that description, you might initially think, oh, that means I want to branch three ways up front, and then each step will need to do some processing. But if you look at the implementation in the code, maybe whoever coded it, and maybe that's yourself, will have done it totally differently with a lot more branching than just three up front because it's a different medium. STEPHANIE: That's a really good point. I also remember reading something about how you can reason about how many branches a piece of code might have if you just look at the structure of the lines of code in your editor if you either step away from it and are just looking at the code not really able to see the text itself but just the shape that it makes. If you have some shorter lines and then a handful of longer lines, you might be able to see like, oh, like these are multiple conditionals happening, which I think is kind of related to what you're saying about taking a piece of code and then diagramming it out to really see the different paths. And I know that that can also be obscured a little bit if you are stylistically using different syntax. Like, if you are using a guard clause to return early, that's a conditional, but it gets a bit hidden from the visual representation than if you had written out the full if statement, for example. JOËL: I think that's a really interesting distinction that you bring up because a lot of languages provide syntactic sugar for common conditional tasks that we do. And sometimes, that syntactic sugar will almost obfuscate the fact that there is a conditional happening at all, which can be great in a lot of cases. But when it comes to analyzing and particularly comparing different implementations, a second conversion that I like to do is converting all of the conditional code to some standardized form, and, for me, that's typically just your basic if...elsif...else expressions. And so any fancy Boolean operators we're doing, any safe navigation that we're doing around nil, maybe some inline conditionals, early returns, things like that, all of the implicit elses that are involved as well, putting them all into some normalized form then allows me to compare two implementations with each other. And sometimes, two approaches that we initially thought were identical, just with different syntax, turned out to have slightly different behavior because maybe one has this sort of implicit branch that the other one doesn't. And by converting to a normalized syntax, all of a sudden, this difference becomes super obvious. To be clear, this is not something I do necessarily in the actual code that I commit, not necessarily writing everything long-form. But definitely, when I'm trying to think about conditional code or analyzing somebody else's code, I will often convert it to long-form, some normalized shape so that I can then see some things about it that were not obvious in the final form. Or to make a comparison with something else, and then you can compare apples to apples and say, okay, both these approaches that we're considering in normalized form, here's what they look like. There's some difference here that we do care about or don't care about. STEPHANIE: That's really interesting. I find it very curious that there is a value in having the long-form approach of writing the code out and being able to identify things. But then the end result that we commit might not look like that and be shortened and be kind of, quote, unquote, "polished," or at least condensed with syntactic sugar. And I'm kind of wondering why that might be the case. JOËL: I think a lot of that will come down to your personal or your company's style guide. Personally, I think I do lean a little bit more towards a slightly more explicit form. But there are plenty of times that I will use syntactic sugar as well, as long as everybody knows what it does. But sometimes, it will come at the cost of other analysis techniques. You had mentioned the squint test earlier, which I believe is a term coined by Sandi Metz. STEPHANIE: I think it might be. That rings a bell. JOËL: And that is a benefit that you get by writing explicit conditionals all the time. But sometimes, it is much nicer to write code that is a little bit more terse. And so you have to do the trade-offs there. STEPHANIE: Yeah, that's a really good point. JOËL: So that's two of the sort of three formats that I was thinking about for converting conditional code to gain more insight. The other format is honestly a little bit weird. It's almost a stretch. But from my time spent working with the Elm language, I learned how to use its type system, which uses a concept called algebraic data types, or some languages will call these tagged unions, some languages will call these sum types. This concept goes by a lot of different names. But they're used to define types into model data. But there's a really fun property, which is that you can model conditional code using this as well. And so you can convert executable code into these algebraic data types. And now, you can apply a lot of tools and heuristics that you have from the data modeling world to this conditional code. STEPHANIE: Do you have a practical example? JOËL: So a classic thing that data modelers will say is you should make impossible states impossible. So in practice, this means that when you define a type using these algebraic data types, you should not be able to create more distinct values than are actually valid in this particular system. So, for example, if a value is required to always be present for something and there's no way in the system for a value to become not present, then don't allow it to be nullable. We do something similar when we design a database schema when we put a null false on a column because we know that this will never be null. And so, why allow nulls when you know they should never be there? So it's a similar thing with the types. This sort of analysis that you can do looking at...the fancy term is the types cardinality. I'll link to an article that digs into that for people who are curious. But that can show you whether a type can represent, let's say, ten possible values, but the domain you're trying to model only has 5. And so when there's that discrepancy, there are five valid values that can be modeled by your type and an additional extra five that are not valid that just kind of shake out from the way you implemented things. So you can take that technique and apply it to a conditional that you've converted to algebraic data type form. And that can help find things like paths through your conditional code that don't line up with the problem that you're trying to solve. So going back to the example I talked about earlier of a multi-step form with three different steps, that's a problem that should have three paths through your conditional. But depending on your implementation, if it's a bunch of independent if clauses, you might have a bit of a combinatorial explosion. And there might be 25 different paths through that chunk of code. And that means three of them are the ones that your problem wants, and then the extra 22 are things that should quote, unquote, "never happen," but we all know that they eventually will. So that kind of analysis can help maybe give you pointers to the fact that your current structure is not well-suited to the problem that you're trying to solve. STEPHANIE: I think another database schema example that came to mind for me was using an enum to declare acceptable values for a field. And, yeah, I know exactly what you mean when working with code where you might know, because of the way the business works, that this thing is impossible, and yet, you still have to either end up coding defensively for it or just kind of hold that complexity in your head. And that can lead to some gnarly situations, and it makes debugging down the line a lot more difficult too. JOËL: It definitely makes it really hard for somebody else to know the original intention of the code when a conditional has more paths through it than there actually are actual paths in the problem you're trying to solve. Because you have to load all of that in your head, and our programmer brains are trained to think about all the edge cases, and what if this condition fires but this other one doesn't? Could that lead to a bug? Is that just a thing that's like, well, but the inputs will never trigger that, so you can ignore it? And if there are no comments to tell you, and if there are comments, then do you trust them? Because it -- STEPHANIE: Yes. [laughter] I'll just jump in here and say, yeah, I have seen the comments then conflict with the code as well. And so you have these two sources of information that are conflicting with each other, and you have no idea what is true and what's not. JOËL: So I'm a big fan of structuring conditional code such that the number of unique paths through a set of conditions is the same as the sort of, you might say, logical paths through the problem domain that we haven't added extra paths, just sort of accidentally due to the way we implemented things. STEPHANIE: Yeah. And now you have three different ways to visualize that information in your head [laughs] with these mental models. JOËL: Right. So from taking code that is conditional code and then transforming it into one of these other representations, I don't always do all three, but there are tools that I have. And I can gain all sorts of new insights into that code by looking at it through a completely different lens. STEPHANIE: That's super cool. JOËL: So the last episode, you had mentioned that you were going to try a soup club. How did that turn out? STEPHANIE: It turned out great. It was awesome, the inaugural soup group. I had, I think, around eight people total. And I spent...right after work, I went straight to chopping celery [laughs] and onions and just soup prepping. And it was such a good time. I invited a different group of friends than normally come together, and that turned out really well. I think we all kind of had at least one thing in common, which was my goal was just to, you know, have my friends come together and meet new people too. And we had soup, and we had bread. Someone brought a spiced crispy chickpea appetizer that went really well inside of our ribollita vegetable bean soup. And then I had the perfect amount of leftovers. So after making a really big batch of food and spending quite a long time cooking, I wanted to make sure that everyone had their fill. But it was also pretty nice to have two servings left over that I could toss in the freezer just for me and as a reward for my hard work. And then it ended up working out really well because I went on vacation last week. And the night we got back home, we were like, "Oh, it's kind of late. What are we going to do for dinner?" And then I got to pull out the leftover soup from my freezer. And it was the perfect coming home from a big trip, and you have nothing in your fridge kind of deal. So it worked out well. JOËL: I guess that's the advantage of hosting is that you get to keep the leftovers. STEPHANIE: It's true. JOËL: You also have to, you know, make the soup. [laughs] STEPHANIE: Also true. [laughs] But like I said, it wasn't like I had so much soup that I was going to have to eat it every single day for the next week and a half. It was just the amount that I wanted. So I'm excited to keep doing this. I'm hoping to do the next soup group in the next week or two. And then some other folks even offered to host it for next time. So maybe we might experiment with doing a rotating thing. But yeah, it has definitely brought me joy through this winter. JOËL: That's so lovely. What else has been new in your world? STEPHANIE: I have a clarification to make from last week's episode. So last week, we were talking about hexagons and tessellation. And we had mentioned that hexagons and triangles were really strong shapes. And we mentioned that, oh yeah, you can see it in the natural world through honeycomb. And I've since learned that bees don't actually build the hexagon shape themselves. That was something that scientists did think to be true for a little bit, that bees were just geometrically inclined, but it turns out that the accepted theory for how honeycomb gets its shape is that bees build cylindrical cells that later transform into hexagons, which does have a lot of surface area for holding the honey, though the process itself is actually still debated by scientists. So there's some research that has supported the idea that it's formed through physical forces like the changing temperature of the wax that transforms it from a cylinder shape into a hexagon, though, yeah, apparently, the studies are still a bit inconclusive. And the last scientific paper I read about this, just to really get my facts straight [laughs], they were kind of exploring aspects of bee behavior that led to the hexagons eventually forming because that does require that the cylinders are perfectly the same size and are at least built in a hexagonal pattern, even though the cells themselves are not hexagons. JOËL: Fascinating. So it sounds like it's either a social thing where the bees do it based off of some behavior. Or if it's a physical thing, it's some sort of like hexagons are a natural equilibrium point that everything kind of trends to, and so as temperature changes, the beehive will naturally trend towards that. STEPHANIE: Yeah, exactly. I have a good friend who is a beekeeper, so I got to pick her brain a little bit about honeycomb. [laughs] MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: So in the past few episodes, we've talked about books we're reading, articles that we're reading. This is kind of turning into the Stephanie and Joël book club. STEPHANIE: I love it. JOËL: That got me thinking about things that I've read that were impactful in the past year. So I'm curious for both of us what might be, let's say, the top two or three most impactful articles that you read in 2022. Or maybe to put it another way, what are the top two or three articles that you reference the most in conversations with other people? STEPHANIE: So listeners might not know this, but I actually joined thoughtbot early last year in February. So I was coming into this new job, and I was so excited to be joining an organization with so many talented developers. And I was really excited to learn from everyone. So I kind of came in with really big goals around my technical growth. And the end of the year just passed, and I got to do a little bit of reflection. And I was quite proud of myself actually for all the things that I had learned and all the ways that I had grown. And I was reminded of this blog post that I think I had in the back of my mind around "Coachability" by Cate, and she talks about how coaching is different from mentorship. And she provides some really cool mental models for different ways of providing support to your teammates. Let's say mentorship is teaching someone how to swim, and maybe helping someone out with a task might be throwing them a life raft. Coaching is more like seeing someone in the water, but you are up on a bridge, and you are kind of seeing all of their surroundings. And you are identifying ways that they can help themselves. So maybe there's a branch, a tree branch, a few feet away from them. And can they go grab that tree branch? How can they help themselves? So I came to this new job at thoughtbot, and I had these really big goals. But I also knew that I wanted to lean on my new co-workers and just be able to not only learn the things that I was really excited to learn but also trust that they had my best interests in mind as well and for them to be able to point out things that could help my career growth. So the idea of coachability was really interesting to me because I had been coming from a workplace that had a really great feedback culture. But I think this article touches on what to do with feedback in a way that I hadn't seen before. So she also describes being coachable as having two axes, one of them being receptiveness to feedback and the other being actionability in response to feedback. So receptiveness is when you hear feedback; do you listen to it? Do you work through it? How does that feedback fit into your mental model of your goals and your skills? And then actionability is like, okay, what do you do with that? How do you change your behavior? How do you change the way you approach problems? And those two things in mind were really helpful in terms of understanding how I respond to feedback and how to really make the most of it when I receive it. Because there are times when I get feedback, and I don't know what to do with it, you know, maybe it just wasn't specific enough. And so, in that sense, I want to work on my actionability and figuring out, okay, someone said that testing would be a really great opportunity for me to learn. But what can I do to learn how to write better tests? And that might involve figuring that out on my own, like, what strategies work for me. Or that might involve asking them, being like, "What do you recommend?" So yeah, I had this really big year of growth. And I'm excited to keep this mental model in mind when I feel like I might be stuck and I'm not getting the growth that I want and using those axes to kind of determine how to move forward. JOËL: I think the first thing that comes to mind for me is the episode that you and I did a while back about the value of precise language. For example, you talked about the distinction between coaching and mentorship, which I think in sort of colloquial speech, we kind of use interchangeably. But having them both mean different things, and then being able to talk about those or at least analyze yourself through the lens of those two words, I think, is really valuable and may be helping to drive either insights or actions that you can take. And similarly, this idea of having two different axes for receptiveness versus...was it changeability you said was the other one? STEPHANIE: Actionability. JOËL: Actionability, I think, is really helpful when you're feeling stuck because now you can realize, oh, is it because I'm not accepting feedback or not getting good feedback? Or is it that I'm getting feedback, but it's hard to take action on it? So just all of a sudden, having those terms and having that mental model, that framework, I feel like equips me to engage with feedback in a way that is much more powerful than when we kind of used all those terms interchangeably. STEPHANIE: Yeah, exactly. I think that it's very well understood that feedback is important and having a good feedback culture is really healthy. But I think we don't always talk about the next step, which is what do you do with feedback? And with the help of this article, I've kind of come to realize that all feedback is valuable, but not all of it is good. And she makes a really excellent point of saying that the way you respond to feedback also depends on the relationship you have with the person giving it. So, ideally, you have a high trust high respect relationship with that person. And so when they give you feedback, you are like, yeah, I'm receptive to this, and I want to do something about it. But sometimes you get feedback from someone, and you might not have that trust in that relationship or that respect. And it just straight up might not be good feedback for you. And the way you engage with it could be figuring out what part of it is helpful for me and what part of it is not? And if it's not helpful in terms of helping your growth, it might at least be informative. And that might help you learn something about the other person or about the circumstances or environment that you're in. JOËL: Again, I love the distinction you're making between helpful and informative. STEPHANIE: Yeah. I think I had to learn that the hard way this year. [laughs] So, yeah, I really hope that folks find this vocabulary or this idea...or consider it when they are thinking about feedback in terms of giving it or receiving it and using it in a way that works for them to grow the way they want to. JOËL: I'm curious, in your interactions, and learning, and growth over the past year, do you feel like you've leaned a little bit more into the mentorship or the coaching side of things? What would you say is the rough percentage breakdown? Are we talking 50-50, 80-20? STEPHANIE: That's such a good question. I think I received both this year. But I think I'm at a point in my career where coaching is more valuable to me. And I'm reminded of a time a few months into joining thoughtbot where I was working and pairing with a principal developer. And he was really turning the workaround on me and asking, like, what do I want to do? What do I see in the code? What areas do I want to explore? And I found it really uncomfortable because I was like, oh, I just want you to tell me what to do because I don't know, or at least at the time, I was really...I found it kind of stressful. But now, looking back on it and with this vocabulary, I'm like, oh, that's what true coaching was because I gained a lot of experience towards my foundational skill set of figuring out how to solve problems or identifying areas of refactoring through that process. And so sometimes coaching can feel really uncomfortable because you are stretching outside of your comfort zone and that your coach is hopefully supporting you but not just giving you the help but teaching you how to help yourself. JOËL: That's a really interesting thing to notice. And I think what I'm hearing is that coaching can feel less comfortable than mentoring because you're being asked to do more of the work yourself. And you're maybe being stretched in some ways that aren't exactly the same as you would get in a more mentoring-focused scenario. Does that sound right? STEPHANIE: Yeah, I think that sounds right because, like I said, I was also receiving mentorship, and I learned about new things. But those didn't always solidify in terms of empowering me next time to be able to do it without the help of someone else. Joël, what was an article that really spoke to you this last year? JOËL: So I really appreciated an article by Adrianna Chang, who's a developer at Shopify, about "Refactoring Legacy Code with the Strangler Fig Pattern." And it talks about this approach to moving refactoring code from one implementation to another. And it's a longer-ranged process, and how to do so incrementally. And a big theme for me this year has been refactoring and incremental change. I've had a lot of conversations with people about how to spot smaller steps. I've written an article on working incrementally. And so I think this was really nice because it gave a very particular technique on how to do so with an example. And so, because these sorts of conversations kept coming up this year, I found myself referencing this article all the time. STEPHANIE: I really loved this article too. And this last year, I also saw a strangler fig tree for the first time in real life in Florida. And I think that was after I had read this article. And it was really cool to make the connection between something I was seeing in nature with a pattern in software development or technique. JOËL: We have this metaphor, and now you get to see the real thing. I was excited because, at RubyConf Mini this year, I actually got to meet Adrianna. So it was really cool. It's like, "Hey, I've been referencing your article all year. It's super cool to meet you in person." STEPHANIE: That's awesome. I love that, just being able to support members of the community. What I really liked about the approach this article advocated for is that it allowed developers to continue working. You don't have to halt everything and dedicate time to refactor and not get any new feature work done. And that's the beauty of the incremental approach that you were talking about earlier, where you can continue development. Sometimes that refactoring might be paused for some reason or another, but then you can pick back up where you left off. And that is really intriguing to me because I think this past year, I was working on a client where refactoring seemed like something we had to dedicate special time for. And it constantly became tough to prioritize and sell to stakeholders. Whereas if you incorporate it into the work and do it in a way that doesn't stop the show [laughs] from going on, it can work really well and work towards sustainability and maintenance, which is another thing that we've talked a lot about on the show. JOËL: Something that's really powerful, I think, with that technique is that it allows you to have all of the intermediate steps get merged into your main branch and get shipped. So you don't have to have this long-running branch with a big change that's constantly going stale, and you're having to keep in sync with the main branch. And, unfortunately, I've often seen even this sort of thing where you create a long-running branch for a big change, a big refactor, and eventually, it just gets abandoned, and you have not locked in any wins. STEPHANIE: Yeah, that's the worst of both worlds where you've dedicated time and resources and don't get the benefits of that work. I also liked that the strangler fig pattern kind of forces you to really understand the existing code. I think working with legacy code can be really challenging. And a lot of people don't like to do it because it involves a lot of spelunking and figuring out, okay, what's really going on. But in order to isolate the pieces to, you know, slowly start to stop making calls to the old code, it requires that you take a hard look at your legacy code and really figure it out. And I honestly think that that then informs the new code that you write to better support both the old feature and also any new features to come. JOËL: Definitely. The really nice thing about this pattern is that it also scales up and down. You can do this really small...even as part of a feature branch; maybe it's just part of your development process, even if you don't necessarily ship all of the intermediate steps. But it helps you work more incrementally and in a tighter scope. And then you can scale it up as big as changing out entire sections of a framework or...I think Adrianna's example is like switching out a data source. And so you can do some really large refactors. But then you could do it as well on just a small feature. I really like using this pattern anytime you're doing things like Rails upgrades, and you've got old gems that might not convert over where it's like, oh, the community abandoned this gem between Rails 4 and Rails 5. But now you need sort of a bridge to get over. And so I think that pattern is particularly powerful when doing something like a Rails upgrade. STEPHANIE: Very Cool. JOËL: So what would be a second article that was really impactful for you in the past year? STEPHANIE: So, speaking of refactoring, I really enjoyed a blog post called Finding Time to Refactor by a former thoughtboter, German Velasco. He makes a really great point that we should think of completeness in our work, not just when the code works as expected or meets the product requirements, but also when it is clear and maintainable. And so he really advocates for baking refactoring into just your normal development process. And like I said, that goes back to this idea that it can be incremental. It doesn't have to be separate or something that we do later, which is kind of what I had learned before coming to thoughtbot. So when I was also speaking about just my technical growth, this shift in philosophy, for me, was a really big part of that. And I just started kind of thinking and seeing ways to just do it in my regular process. And I think that has really helped me to feel better about my work and also see a noticeable improvement in the quality of my code. So he mentioned the three times that he makes sure to refactor, and that is one when he is practicing TDD and going through the red-green-refactor cycle. JOËL: It's in the name. STEPHANIE: [laughs] It really is. Two, when code is difficult to understand, so if he's coming in and fixing a bug and he pays the tax of trying to figure out confusing code, that's a really great opportunity to then reduce that caring cost for others by making it clear while you're in there, so leaving things better than you found it. And then three, when the existing design doesn't work. We, I think, have mentioned the adage, "Make the change easy, and then make the easy change." So if he's coming in to add a new feature and it's just not quite working, then that's a really good opportunity to refactor the existing design to support this new information or new concept. JOËL: I like those three scenarios. And I think that second one, in particular, resonated with me, the making things easier to understand. And in the sort of narrower sense of the word refactoring, traditionally, this means changing the structure of the code without changing its behavior. And I once had a situation where I was dealing with a series of early return expressions in a method that were all returning Booleans. And it was really hard because there were some unlesses, some ifs, some weird negation happening. And I just couldn't figure out what this code was doing. STEPHANIE: Did you draw a diagram? [laughs] JOËL: I did not. But it turns out this code was untested. And so I pretty much just tried, like, it took two Booleans as inputs and gave back a Boolean. So I just tried all the combinations, put it in, saw what it gave me out, and then wrote tests for them. And then realized that the test cases were telling me that this code was always returning false unless both inputs were true. And that's when it kind of hits me, it's like, wait a minute, this is Boolean AND. We've reimplemented Boolean AND with this convoluted set of conditional code. And so, at the end there, once I had that test coverage to feel confident, I went in and did a refactor where I changed the implementation. Instead of being...I think it was like three or four inline conditionals, just rewrote it as argument one and argument two, and that was much easier to read. STEPHANIE: That's a great point. Because the next time someone comes in here, and let's say they have to maybe add another condition or whatever, they're not just tacking on to this really confusing thing. You've hopefully made it easier for them to work with that code. And I also really appreciated, you know, I was mentioning how this article affected my thought process and how I approach development, but it's a really great one to share to then foster a culture of just continuous refactoring, I guess, is what I'm going to call it [laughs] and hopefully, avoiding having to do a massive rewrite or a massive effort to refactor. The phrase that comes to mind is many hands make light work. And if we all incorporated this into our process, perhaps we would just be working all around with more delightful code. Joël, do you have one more article that really stood out to you this year? JOËL: One that I think I really connected with this year is "Parse, Don't Validate" by Alexis King. Long-time listeners of the show will have heard me talk about this a little bit with Chris Toomey when he was a guest on the show this past fall. But the gist of the article is that the process of parsing is converting a broader type into a narrower type with the potential for errors. So traditionally, we think of this as turning a string which a string is very broad. All sorts of things are strings, and then you turn it into something else. So maybe you're parsing JSON. So you take a string of characters and try to turn it into a Ruby hash, but not all strings are valid hashes. So there's also the possibility for errors. And so, JSON.parse() could raise an error in Ruby. This idea, though, can be then expanded because, ideally, you don't want to just check that a value is valid for your stricter rules. You don't want to just check that a string is valid JSON and then pass the string along to the next person. You actually want to transform it. And then everybody else down the line can interact with that hash and not have to do a check again is this valid JSON? You've already validated that you've already converted it into a hash. You don't need to check that it's valid JSON again because, by the nature of being a hash, it's impossible for it to be invalid. Now, you might have some extra requirements on that hash. So maybe you require certain keys to be present and things like that. And I think that's where this idea gets even more powerful because then you can kind of layer this on top and have a second parsing step where you say, I'm going to parse this hash into, let's say, a shopping cart object. And so, not all Ruby hashes are valid shopping carts. And so you try to take a broader value and coerce it into a narrower value or transform it into a narrower value and potentially raise an error for those hashes that are not valid shopping carts. And then, whoever down the line gets a shopping cart object, you can just call items on it. You can call price on it. You don't need to check is this key present? Because now you have that certainty. STEPHANIE: This reminds me of when I was working with TypeScript in the summer of last year. And having come from a dynamically-typed language background, it was really challenging but also really interesting to me because we were also parsing JSON. But once we had transformed or parsed that data into this domain object, we had a lot more confidence about what we were working in. And all the functions we wrote down the line or used on the line, we could know for sure that, okay, it has these properties about it. And that really shaped the code we wrote. JOËL: So use the word confident here, which, for me, it's a keyword. And so you can now assume that certain properties are true because it's been checked once. That can be tricky if you don't actually do a transformation. If you're just sort of passing a raw value down, you'll often end up with code that is defensive that keeps rechecking the same conditions over and over. And you see this lot around nil in Ruby where somebody checks for a value for nil, and then inside that conditional, three or four other conditions deep, we recheck the same value for nil again, even though, in theory, it should not be nil at that point. And so by doing transformations like that, by parsing instead of just validating, we can ensure that we don't have to repeat those conditions. STEPHANIE: Yeah, I mean, that refers back to the analyzing conditional code that we spent a bit of time talking about at the beginning of this episode. Because I remember in that application, we render different components based on the status of this domain object. And there was a condition for when the status was something that was not expected. And then someone had left a comment that was like, technically, this should never happen. But I think that he had to add it to appease the compiler. And I think had we been able to better enforce those boundaries, had we been more thoughtful around our domain modeling, we could have figured out how to make sure that we weren't then introducing that ambiguity down the line. JOËL: I think it's interesting that you immediately went to talking about TypeScript here because TypeScript has a type system. And the "f, Don't Validate" article is written in Haskell, which is another typed language. And types are great for showing you exactly like, here's the boundary. On this side of it, it's a string, and on this side here, it's a richly-typed value that has been parsed. In Ruby, we don't have that, everything is duck-typed, but I think the principle still applies. It's a little bit more implicit, but there are zones of high or low assumptions about the data. So when I'm interacting directly with raw input from a third-party endpoint, I'm really only expecting some kind of raw string from the body of the response. It may or may not be valid. There are all sorts of checks I need to do to make sure I can do anything with it. So that is a very low assumption zone. Later on, in the business logic part of the code, I might expect that I can call a method on the object to get the price of a shopping cart or a list of items or something like that. Now I'm in a much higher assumption zone. And being self-aware about where we transition from low assumptions to high assumptions is, I think, a really key takeaway for how we interact with code in Ruby. Because, oftentimes, where that boundary is a little bit fuzzy or where we think it's in one place but it's actually in a different place is where bugs tend to cluster. STEPHANIE: Do you have any thoughts about how to adhere to those rules that we're making so we're not having to assume in a dynamically-typed language? JOËL: One way that I think is often helpful is trying to use richer objects and to not just rely on primitives all the time. So don't pass a business process a hash and be just like, trust me, I checked it; it's got the right keys because the day will come when you pass it a malformed hash and now we're going to have an error in the business process. And now we have a dilemma because do we want to start adding defensive checks in the business process to be like, oh, are all our keys that we expect present, things like that? Do we need to elsewhere in the code make sure we process the hash correctly? It becomes a little bit messy. And so, oftentimes, it might be better to say, don't pass a raw hash around. Create a domain object that has the actual method that you want, and pass that instead. STEPHANIE: Oh, sounds like a great opportunity to use the new data class in Ruby 3.2 that we talked about in an episode prior. JOËL: That's a great suggestion. I would definitely reach for something like that, I think, in a situation where I'm trying to model something a little bit richer than just a hash. STEPHANIE: I also think that there have been more trends around borrowing concepts from functional programming, and especially with the introduction of classes that represent nil or empty states, so instead of just using the default nil, having at least a bit of context around a nil what or an empty what. That then might have methods that either raise an error or just signal that something is wrong with the assumptions that we're making around the flexibility that we get from duck typing. I'm really glad that you proposed this topic idea for today's episode because it really represented a lot of themes that we have been discussing on the show in the past couple of months. And I am excited to maybe do this again in the future to just capture what's been interesting or inspiring for us throughout the year. JOËL: On that note, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thank you so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeeeeee!!!!!!!! ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.
For our final holiday special podcast episode, we want to help you feel as physically prepared as possible when going for your VBAC!Stephanie of My Essential Birth joins Meagan to share her wisdom from her own two VBAC births as well as what she has helped women learn through her many years as a birth worker. You will hear tips on how to choose and vet providers, three free exercises that might just make all the difference during your labor, and the secret lesson Stephanie has learned that she wants all of our listeners to know. Additional LinksStephanie's Website and CoursePregnancy and Birth Made Easy PodcastBebo Mia's WebinarHow to VBAC: The Ultimate Prep Course for ParentsFull Transcript under Episode DetailsFull TranscriptMeagan: Turn your love of babies and bellies into cash. If you love babies and bellies and want to provide care and support to families, then Bebo Mia's webinar is the right place for you. Get answers to those burning questions like how to be the voice you wish you had at your birth and how babies and families can be supported by doulas. Learn all about the different kinds of doulas. You can work in fertility, pregnancy, birth, postpartum, or just enjoy working with those squishy babies. Supporting families by becoming a birth worker, aka doula, is perhaps an option that hasn't even crossed your mind. That's why we want you to join this webinar. You can have great earning potential while doing something you love. Bebo Mia is the one-stop shop for education, community, and mentorship. Reserve your spot today at bebomia.com/freewebinar.Meagan: Hello, hello you guys. It is the end of the year. This is Meagan with The VBAC Link and I have another holiday edition for you. Today is one that I am so excited about because this is someone that I know personally. She's a dear friend of mine and we have taken similar journeys through our doula careers, so it's really fun to be with someone that I already know and that we have the same mindset and goals for all of you out there. This is Stephanie and she is amazing. So amazing. She is a mom and a doula. She's had a VBAC and she actually has an amazing course through My Essential Birth. That's correct, right? My Essential Birth? Stephanie: Yep. Meagan: It's a course on how to prepare and get ready for birth. She has the same drive, I feel like, and passion as I do to get the information out to all of you and to help you know what is best for you whether it be, again, scheduling a repeat Cesarean or having a VBAC or maybe you're a first-time mom and you just want to know how to go along the way, seriously, Stephanie is going to be that person for you. So I'm so excited today to have her on. Welcome, Steph. Stephanie: Thank you. That's quite an introduction. I love it. Come to my podcast. Do the same thing. Meagan: No, no seriously. I was going to say, she has a full-on introduction here too. But you are amazing. You are so amazing and I love what you have done with My Essential Birth. You're busy. You've got three kids. You've got three kids and something too that is really fun is every single birth has been so different which I think just broadens your knowledge and passion, even more, to do what you do because for me, my births were all so different and I don't know, I really don't know if I would be here today if I didn't have all of those births. Stephanie: Yeah, 100%. Yes. Meagan: Don't you feel like these experiences in our lives have brought us here today and have brought passion to our hearts? But yeah. On top of that, you homeschool. You do so many things. You wear so many hats, so I'm so grateful for you taking the time today to talk to us about all of the amazing things that you do. But I think one of the really cool things right off the bat is, let's talk about your VBACs and how you really got started in all of this. Stephanie: Yeah, I think you really hit the nail on the head because 100%, if I hadn't had the experiences with the births that I have had, I wouldn't have not only the passion but the knowledge from seeing things go wrong. It makes me think of when I was 16 and I got my first car and it was a piece of crap and everything broke down on it so I had to learn about things [inaudible]. Meagan: Yes. Stephanie: No, I'm not comparing my body to a car, but I will say that those experiences totally shaped the way that I do what I do today and the passion behind it. My first baby– now, mind you, in my head, this was my goal. I wanted to go unmedicated. It was what I wanted to do. I just wanted to have that experience for myself for no particular reason. That's just what I wanted to do. We got around 34-35 weeks and I was reading a birth story online. Mind you, this was 13, 14 years ago, so it was a little bit ago not like what we see today with birth stories and stuff, but I'm at work and bawling because I'm super pregnant. I'm like, “That's what I want my birth to be like,” so I researched the classes that kind of went along with this book and I reached out to some local birth educators. It was this 12-week series and I had four or five weeks left to go. There was this one lady that was like, “Okay, I'll do these intensive courses on the weekend if you could make it.” I'm over like, “My husband works every weekend. We're super broke.” She was going to do it for this bigger prize. I'm like, “It's fine. I'll wing it. It's going to be fine.”Fast forward to that birth and missing some red flags, things like my provider telling me when first of all, he didn't want to have the conversation until 36 weeks about what the birth was going to be like, so I told him early on, “I don't want to have an epidural. I want to go unmedicated.” He was like, “We don't talk about that until 36 weeks.” That was a red flag, but I didn't know any better. Meagan: Interesting, yeah. Because that's what they do. Stephanie: Uh-huh and I was like, “Okay. Sure.” Totally. He was super old school. There were a couple of things and just the way that he talked to me that I should have caught on, but when 36 weeks came and I said, “I really want to go unmedicated,” and whatever and he was talking about, “Well, I actually let my patients get their epidurals much earlier than others. Why be in pain?” And I'm like, “No, it's really important to me.” And then he continued with, “Well, women with size 5.5 shoes and smaller tend to have Cesarean births.” Now, mind you, I'm a small person. I'm 5'0”. My shoe size is 5.5 and I'm sitting there just, “You've got to be freaking kidding me,” because my grandmother who was 4'10”, and her grandmother. I'm just going down the line like, “Nobody would be here. What are we talking about?” But at the same time, I'm a new mom. It's my first birth. I'm scared, so I stayed with him, and anyways, the cascade of intervention that happened was my water broke with just a trickle. I didn't have contractions. The provider ended up telling me once I was at the hospital that I needed to have Pitocin and I say that because I remember asking the nurse, “Did he say that word need?”She was like, “I'll come back.” But she was like, “He said need.” So I said, “Okay, well then I must need Pitocin.” So we took Pitocin. That baby did not do well with it. He couldn't crank up the Pitocin enough to make the contraction strong enough to actually make labor progress because my baby's heart rate would drop. That was, in my opinion, a medically-caused Cesarean because yes, when I have a baby in distress, then there we are. So that was my first experience with birth. I didn't connect with my baby right away. On top of being a new mom and figuring out life, I had just had abdominal surgery. I was a mess of emotions and then the next two births are where I found some redemption and healing and passion and power for women's bodies and what we can do. During my second birth, we had moved overseas to Germany and I was meeting with a doctor. I'd met with an OB but it was actually midwives who you give birth with. I had taken a really good birth course and I had been practicing a lot of stuff. I did not understand a ton about positioning though for my baby and so I had two days of prodromal labor which is not that big of a deal. Two days of prodromal labor, then finally things kicked in and I was in full active labor, but then I had pushing contractions at 4 centimeters, so now, my doula brain goes, “Oh, it's a positional thing. I have all of these ideas,” but then, I was like, “Oh my gosh. I'm not going to make it.” And then too, the wonderful German nurse there– there was a little bit of a language barrier for sure, but I was like, “I really want to get into the water.” She was like, “Oh, later. And also, I have something, honey, that will take all of that away. You just let me know if you want a little bit. We'll just stick it in the bum. A little bit of pain meds.” At the time, I was like, “Yeah, that's a good idea. Let's try that.” But I had the pain meds. That ended up being like, I was comfortable before two contractions before my water broke. It took the edge off enough that my body was like, “Let's get things started,” but then the contractions were right back on. I did end up with an epidural for that birth. My baby did fine with the Pitocin. I pushed that baby out vaginally. I wasn't forced into another Cesarean or anything and that birth was amazing. I was very, very pleased with the way that that birth went. And then we were moving from Germany back to the United States, particularly to North Dakota. If you know anything about North Dakota, they don't even have– my midwife was not a licensed midwife on purpose. You cannot be a licensed midwife and deliver babies outside of a hospital setting. They can get arrested. Meagan: Yeah. Yeah. It's illegal. Stephanie: It's not the black market, but she's not licensed. She was a direct-entry midwife. So we were moving back from overseas to North Dakota and I called the hospital first before I met with a home birth midwife. They told me, “Well, we don't really care that you've had a vaginal birth after Cesarean. You had a Cesarean before, so you need to plan for another scheduled Cesarean birth,” so talk about my red flags now. Meagan: You're like, “Nope. Nope.” Stephanie: No way. I'm going to do whatever I have to do. So I did. I reached out to a home birth midwife. I found a doula and all of those things that I probably should have done with baby #1. We planned for me to have an unmedicated experience at home. I was really excited about that up until 35, 36 weeks. I had a breech baby for one and that breech baby, we were able to get him turned, so that part went away, but then it was the mental game of, “Can I actually do this? You've never not had an epidural.” All of that self-talk starts happening and it's not good. My doula was like, “Here's a list of affirmations. Take what you like. Leave the rest and start saying them out loud several times a day every day.” And so I did that and within a week or so, I was like, “Oh my gosh.” I went from being scared and nervous to confident and excited. I was like, “I can do this.” So that baby had a week of prodromal labor. It was about 5 or 6 days of prodromal labor and then things get moving and I have some active labor that hit, but my contractions never really got closer than about 6 minutes apart. They would last a minute to two minutes long, but they were never those super crazy close, consistent. Things kept going off in my head like, “If I was in the hospital, I definitely would have been offered a Cesarean birth.” It wouldn't have been a question, especially in that hospital. These contractions were coming. My midwife, we finally call her and I'm like, “Look. I've been in prodromal labor and now it's active labor, but they're not closer than 6 minutes.” She checks me and I'm 6 centimeters. I was like, “My labor is progressing on my own.” It was so cool. And then it was another 12 hours from that point and I had my baby. But it was incredible. Those contractions and just knowing that my body was doing what it was meant to do. There was a point where I was like, “Oh my gosh. I'm so tired. I need to sleep.” For sure, we went upstairs. I slept for 45 minutes. I had two contractions. It was another moment where I was like, “Yeah.” If I was at the hospital, somebody would say, “Oh, she's stalling. We've got to do something.” Whatever. But those two contractions and the second one, I woke up and I was like, “Oh my gosh, what is happening? I can't do this anymore.” Sure enough, I'm thinking, this better be transition. My midwife comes in. She had heard me. She was sleeping downstairs. She comes to the door. She's like, “Do you want me to check you?” I'm like, “Yes, please. Let's see where I'm at.” She's like, “You're 9.5 with a bouncy lip of cervix. You're good to go. Let's get you to go to the bathroom. You can get in the birth tub now.” So we did that and i can laugh about it now, but I went downstairs. I went to the bathroom and after I was done peeing, I had my first pushing contraction. I remember telling my husband, “I don't want to give birth on the toilet. I have to get out of here.” 4.5 hours later because of the mental blocks that I had– we can laugh about that now, but at the time, it was very serious. Like, “I'd better get to the birth tub.” Meagan: Yeah. I'd better get out of here. Stephanie: Yeah, but it was wonderful. I will tell you the differences. The major differences for me in the spaces that I was in for being able to give birth unmedicated and as a VBAC, my birth team made the biggest difference. When I was at home and feeling like, “Oh my gosh. I can't do this anymore. Oh my goodness. I've been pushing so long. I'm so tired,” everyone was like, “But you are doing it. You're doing great. Keep it up.” I'm like, “Oh. I can take that in and chill and feel supported.” So I did. We kind of joke about, first of all, I was making noises that my husband the next day told me, “You sound like the screaming goats.” I was like, “Oh my gosh. I do.”Meagan: I was called a cow. My husband was like, “You're a mooing cow in there.” I'm like, “Thank you so much.”Stephanie: Well, the best part of this story, I actually love this story, the next day, my husband is sitting at the table and showing our little boys the screaming goat video. His mom's walking down the stairs and goes, “You recorded her?!” Meagan: Uh-uh!Stephanie: So I'm like, “Okay, yeah. I get it. I get it. I really did sound like that.” Meagan: You really did sound like that. That is so funny. Stephanie: But anyways, I'm pushing all this time and I do remember hitting a point even during pushing, I'm like, “Oh my gosh. I can't do this.” I was scared. I had never pushed a baby out before. Instead of holding my breath and bearing down, I was purposely breathing through my nose and not leaning into that pushing. My husband was finally like or I told him, “You need to make the bed. I need to get out of the tub,” because in my head, all I'm thinking about was, “If I can't do this, then I'm going to have to go to the hospital. We're going to have to call an ambulance. The lights are going to be on. There's going to be people I don't know.” I had to walk myself through all of those things. Meagan: You were really deep in that space. Yeah. Stephanie: Yeah. I was like, “No. This has to happen here because I can't deal with all of that.” So I told my husband, “Go upstairs. Make the bed.” I was like, “Make sure you get the lining down so we don't mess up the mattress and all of that.” When he went upstairs, it was the first time that I paused and tuned into myself. I just said a quick prayer and for me, I call God Heavenly Father. “Heavenly Father, please. I can't do this alone. I'm scared.” My husband comes down the stairs. I'm just finishing that prayer. He's ready to lift me out of the water. He was like, “Come on. Let's go. Let's go now.” He went to lift me and I'm like, “No. It's happening.” Two pushes later, that baby was out. Meagan: Oh, that just gave me major chills. Stephanie: It was the most spiritual experience of my life. I love everything about it. Yes, it was probably one of the hardest things I've ever done physically. Mentally, how it pushes you to your limits, and then you feel like you are the strongest woman alive. You can do anything. You're a good mother. You're all of the things. It was that feeling and looking at what I had done through having good support that I was like, “No. We're lying to women. You know what? If I could do this, anyone can. So now I'm going to become a birth educator and now I”m going to work with women one-on-one. I know that you can do this.” So that's where the passion came from. Those were my birth stories. Meagan: I love it. I love it. Oh, that just gave me such chills. You know what's interesting is I don't think I've ever even heard all of your birth stories like that. Stephanie: Oh really? Meagan: I don't think I have. We have some similarities. We have some similarities. Stephanie: I know. I've read through some of yours too. I love it. Yeah. Meagan: Even more. I don't think I realized. Yeah, maybe I have and it was a long time ago and I forgot, but there are a lot of similarities. I love it. You've had these VBACs. You found this passion and here you are today. So in past episodes, we've talked about mentally preparing and mentally getting into that space. You just did that. You just talked about that which is so important. It is so crucial to be in that space because when we're out here, we can't dive into birth. I feel like I did the same thing. I wish that it was recorded so I could really show people how big of a tantrum I was throwing, but I was legitimately throwing a tantrum in my driveway pacing back and forth saying, “If my water wouldn't have just broken, this would be totally different. This is happening all over again.” I was really spiraling and everyone just sat there. My neighbor was seeing me. She was like, “Oh!” I'm like, “I'm in labor.” She stopped and was like, “Is she okay?” Rick was like, “She's just gonked or something right now.” I had her watching me. My mom was watching me. The kids were like, “Mom!” I'm throwing my hands and voicing everything that was in my head out loud getting it out there but I needed to do that. I needed to do that but as soon as I could get that out, I remember the drive. We were getting in the car to go to the birth center and meet my midwife. I had my baby later that night, but it was the morning before I had my baby and he was just like, “So, how did that feel?” I was like, “So good.” I just remember labor coming on so much stronger. You have to get in that head space. We know there is the headspace, but what about the physical? I feel like there is so much goodness that you talk about. The physical aspect of preparing for birth and not even just preparing to actually give birth, but preparing and creating that team and creating that environment. One of the first things is knowing your stuff. How can our listeners know their stuff? Right now, they are listening to this, so this is what you can do to know your stuff. But yeah. When you say ‘know your stuff', what would that all entail? What would you suggest?Stephanie: Yeah, this is kind of the tricky thing that I'm always weighing one thing against the other where it's knowing what you want for your birth and how to get there and then making sure that you're vetting your provider. They really do go hand in hand but it's really tricky because just depending on what order you take, you may have to change up one or the other. But when it comes to understanding what you need in order to have the birth that you desire, one of the things that I tell moms to do is, “Take a meditative moment. Close your eyes and take some deep breaths. Picture yourself from that very first contraction through to when you give birth. What does that look like? Where are you? Who is around you? What are the lights like? What do you smell? What do you see?”That will help you decide. It gives you some idea of how to get there or what you're going to need in order to get there. I'll do this exercise with moms and moms that were planning to give birth at a hospital but never make it there in their minds. They're at home. They don't ever get in the car to go to the hospital. They've had their baby at home. So I think really understanding what you are looking for. And even for a mom that has that experience, she's planning to give birth at a hospital, but she has this really calm, relaxing thing at home, it doesn't necessarily mean that she needs to be giving birth at home although it could, maybe it's more of, “So I need to have control over my body, control over the situation. I need to be in my own clothes,” and those sorts of things. Meagan: Oh, I love that you just said that. Stephanie: And really understanding what is creating that image in your mind. But of course, I'm going to talk about taking a good birth course because not only is that what I did that was so life-changing for me but that is what I help moms do today just like you have a birth course where you talk about preparing for VBAC. A good birth course is going to include all of those things like how to stay healthy and low-risk with nutrition, and good exercise that you can do not just moving your body and keeping your heart rate, but what are things positionally that you can do for yourself and your baby? How are you going to stretch the perineal area or use the specific muscles that are going to be used for birthing and labor time? That's going to be all the way through understanding each phase of labor, how to work with your birth partner, how they can support you, how relaxation can be so important and meditation, all the way through to birth and postpartum. That includes every situation that can happen on the way. When you walk into your birth space, are you going to have an IV or wear your own clothes? Do you want to have intermittent fetal monitoring or do you want to be on the monitor the whole time? If you're talking induction, what are your options? So I think really understanding what your options are, and some of that changes as your birth changes or as other options are provided whether or not you have gestational diabetes or if you're GBS positive. Those are different decisions you have to play with and make, but if you like listening to podcasts, taking a good birth course, watching birth videos, if you're gathering all of that information and coming together for yourself deciding what you want for yourself, then you can move into asking the right questions to help that provider because that really is the next step. You can have this wonderful birth that you have thought of and dreamed of in your mind and if your provider is not on the same page, if they are not supportive, you might not get it at all and it's not even your fault. Meagan: I know. That is so hard because sometimes we don't know what it looks like to have that supportive provider. We don't know what it looks like because for me, with my first birth, I went to my OB and he was really nice and welcoming, and charming. I was like, “Cool. He's rad. He's great,” and then there were the red flags but I didn't see those red flags. It's so hard to know how to find that provider and you say to vet your provider. What do you mean by vetting your provider and what tips would you give to start that process and know right away what you really want to look for? Stephanie: Yeah. I'm glad you asked that. I think probably one of the best things you can do is meet with more than one and different practices. Meagan: Yes. Yes. Different practices are such a big thing because even the one provider in the same practice, they're going to have similarities so it is so important to branch out. When I was going that with my VBAC baby, I did. I went to multiple people and I could physically feel the difference without even speaking to anybody. Stephanie: Yes. 100%. I always said that I didn't believe I was intuitive at all just as a person, I don't feel like I am in touch with myself. If that's you, you're wrong. Just like you explained right there, we do. You know when you have conversations with other people or you walk into a room. There's a feeling there and how you're treated matters. The problem is, I think and I mean, I'm guilty of it too. I think we put providers on this pedestal and they're kind of untouchable. They're above us in some way because they're gone to school and they've got knowledge about things that we don't. In some ways, maybe that's true. That's why we hire them because they have skills that we need that we can't meet while we are in our vulnerable state. The other side of that is that they are also a person and how they treat us matters. And so when you are asking questions and meeting with providers, how are you feeling? Were you respected? Were you rushed when you bring up something? Providers will actually eye roll or laugh at some of the things that you say. That's a red flag. Meagan: It's so true. Yes. Stephanie: I say too, you know what? Go meet with a birth center out-of-hospital provider. You don't have to plan on giving birth there at all. Pay attention to how you are treated. How does that feel for you? For people that are maybe interested in that and they are like, “Oh, that's so scary and my husband doesn't want to or my birth partner really doesn't want me out of the hospital,” great. Go take him and have a free interview with an out-of-hospital care provider and just see how you feel. If you hate it or it's not for you, then that's great but I think that you need to have the contrast. I think you deserve to have the contrast. It's the same with doulas. I'm like, “You don't know if you want a doula? Great. Go meet with one anyways. It's a free consult and then you can decide.” But vetting a provider, like I said, you have to have some questions going in. VBAC-specific moms, they're going to want to know things like, “Okay. For a mom like me, I'm healthy and low-risk. It's my second baby and I've only had one Cesarean birth. What does it look like for someone like me in your practice having a vaginal birth after a Cesarean? What are your percentage rates? Do you use the VBAC calculator or how do you decide? Do you induce? What are your reasons for induction and can I say no?” You always can but it's always fun to ask a provider, “Can I say no?” The answer should always be yes but it might not be. “We'll talk about it when we get there.” So you have to have some specific questions that you're bringing in to decide if this is somebody that you can handle and you are probably maybe not going to match up on every single thing. That's okay too, but are those big things being met? I think that's what helps you decide, “Is this going to be a good match for me or not?” Meagan: Yeah. I love that. And just tuning into your overall feeling. Like you said, providers can eye roll and they can be subtle. They can be subtle, really subtle, right? Even midwives can do that too. Stephanie: Oh totally, yes. Meagan: OBs, midwives, it's so important to really tune into that. I think it's so important to do that even before becoming pregnant too. Sometimes to find an OB—if you are thinking that you want to become pregnant soon and you have an OB or a midwife, start there. That's totally fine, but it's okay to branch out and say, “I'm not expecting yet. I'm preparing. I want to find that provider right from the beginning.” Sometimes that doesn't happen, but I think it's good to do if you can. I mean, I wasn't pregnant and I went to 12 providers. Stephanie: I love it. Meagan: 12 providers which were maybe excessive. Maybe, but that's what I needed. I needed to go and I needed to hear all of their things and feel all of that in those environments. I chose the provider that I thought was totally amazing. He still is. I'm not saying he's not, but for me, I thought he was perfect. He was exactly what I needed out of everybody and then I still changed at 24 weeks, right? And so a lot of people are like, “Why would you change? He's so supportive.” I'm like, “He is so supportive and I still feel all the good, but something is not resonating.” That's okay too. Even if you do find your provider. Say at your appointment, you find your provider and you're not feeling it or you're getting things like Stephanie where it's like, “Hey, this is what I want to do.” “We don't talk about that yet.” Those types of things, if they are not willing to hear you and they don't want to know how they can help you in this birth experience, are red flags. Don't feel like you have to stay like both Stephanie and I did because I felt like I had to stay too. I felt like I was cheating on my provider if I left him. He had gone this far with me. He had supported me this far, but at the same time, I truly believe I probably wouldn't have had that second Cesarean. I really don't believe that if I would have changed, but it's okay because it's my birth story and that's why I'm here, but it's okay. It's okay if you're feeling off and you want to change. It's okay to do that. Stephanie: Yeah. I think you can't shout that from the rooftops enough because it's true. You do feel like, “Oh, I'm going to hurt their feelings or something.” No, you're not and if you do, who cares? You're never going to see them again. Let it go. Meagan: Exactly. Stephanie: It's so important for you and your future. It's such an important moment for you. It doesn't matter. It should trump that. Meagan: It should trump that. Someone else's feelings. That's the hardest thing. We have so many people out there. If you are a people pleaser, you're not alone and it's easy to please your provider. You want to please your provider, but remember, they are working for you. They are there for you. If they're not pleasing you, it's okay to leave. It is okay to leave and so yeah. It's a hard thing to do, but I do encourage people to tune in, follow their hearts, tune into that and do what's best for them because if they don't truly vet their provider, it can make or break an experience. Stephanie: Yeah, it can. A good provider is going to help make it just like you said. My midwife and my doula who were in that third birth, oh my gosh. They are a part of my life forever whether they like it or not. You are bonded with those people forever and you need that kind of support in your life. Meagan: Right, yes. Yes. Okay, so we're talking about knowing your stuff and vetting your provider. Now, let's talk about putting in the work. We've got these things. Now, going for it. What things would you suggest? Stephanie: Yeah as far as putting in the work, I really recommend– and I have it on my website as well and you can tell me if you like these ideas or not, but I recommend these three exercises that you can do every day. First is the forward-leaning inversion. You're literally—you get up on a low-lying chair or couch probably with support. Put a pillow down in front of you. Get your elbows on the ground with your bum in the air and you hold that for three breaths. You do that once a day. If you're somebody who has heartburn or something, obviously, you're maybe going to want to not do that depending on how the heartburn is or there are a couple of people who shouldn't do that. Basically, that is really good because it releases certain ligaments. It allows more room for baby. It allows for really good positioning. That's something that you can do to make sure baby is in a good position. Meagan: Every day. Stephanie: Every day. An easier, more comfortable labor. The other thing you're going to do is pelvic tilts. You can choose to do how many you want, but I like to do them at least when I get up in the morning and before I go to bed. That's 20-40 tilts. That's in the hands-and-knees position. You're tilting your pelvis forward and into a flat back, forward and into a flat back. Again, that's strengthening certain areas. It's helping baby's position. Those are really, really good for you to be doing. The third one is the squat. This is a deep-seated squat. It's not like we are going to grab weights and do a weighted squat or anything like that. This is like how you see people in third-world countries who don't have chairs or new babies, toddlers when they go down to squat and play with something, look at that squat because that's the one that you are going for. The reason for that is because it stretches the perineal area. It strengthens the muscles in your legs. Chances are when it was pushing time, you're going to be in some kind of squat. Now maybe not, but chances are the majority of us are going to end up there. The other thing about squatting is that it shortens the birth canal, it makes it easier to be able to push baby out and that's why we end up in that position but if you're practicing that squat specifically, and this is where my husband was so good. “I'll tell you what, for every minute you squat for the day, I will give you a minute of massage at the end of the night.” I was like-- Meagan: Oh my gosh. Done. Done, done, done. Stephanie: An hour a night, I am not joking. So he was so good supporting me that way, but I'll tell you what, when I started squatting and it was probably later in my pregnancy like 34-35 weeks. When I started squatting, it was 1-2, maybe 3 minutes before my legs were numb, my feet hurt and I had to stand up. Everything was tingling, but a couple of weeks in, I could hold it for 15 minutes comfortably. So when I was telling you before that I was pushing for 4.5 hours, I was in a birth tub in a squatted position for that amount of time— Meagan: Wow. Stephanie: --and I remember thinking, “I'm so glad I practiced these squats because I wouldn't have had the stamina.” As far as physical prep, those are things that you can do every single day. Meagan: I love that. Stephanie: Thank you. I know and I'm like, you and I have taken some similar training and stuff. It's valid. It's real. Meagan: It really is. Stephanie: The other things that you can do are, let's stay healthy and low-risk. That means you're eating a high-protein diet. You're drinking a lot of water. You're taking your prenatals, well-balanced. That matters because it can keep things like preeclampsia at bay. It's also going to make you feel better and give you more energy, so there are a lot of benefits to that. But my favorite part of staying healthy and low-risk is that you remain in charge of your birth decisions. That's why it matters to me so much. It's not even just for the health of myself and my baby. It also comes down to, “I want to have a say as to how all of this goes.” So those are some of the physical things. Then we move into the, once I understand how birth works, what are the signs that I'm in labor? What are the signs I'm in active labor? How do I work with my body? Learning things like relaxation and I do that through relaxation practice. Even just a simple one, and you can do this with your birth partner or by yourself, but you set up this stage. So use your senses. You should be leaning back in a chair or in your bed lights dimmed with essential oil or a consistent smell that your body gets used to smell. You just practice breathing deep into your belly. Imagine how you breathe when you wake up in the morning. First thing, pay attention to how you breathe when your eyes first open. It's really deep belly breaths so try to aim for that. Do that for 10 minutes. Just go from your head to your toe and be like, “Okay. I'm going to feel the hairs on my head relax, and then my eyebrows, and then my jaw.” All the way down. The thing is, it's not easy to do when you're not used to relaxing but when you utilize all of those senses, then it becomes something called muscle memory. So if I know my body knows because I've been doing this for the last several months that every time the lights are dimmed and I smell lavender essential oil and I'm breathing into my belly, then when you do those things during labor, it's like, “Oh, lights are dimmed and lavender,” then you don't really have to think about it. Meagan: It's intuitive. Stephanie: Yes. “I'm supposed to relax now.” And then obviously you need to practice relaxation. Once you get good at that, you can practice it with the lights on, with the TV on, with your husband or kids walking through the room because that's the reality of birth and especially if you're in a hospital. Meagan: Yes, yes. Stephanie: But learning relaxation is really important. And then you move into—there's a lot more to do with that like meditation and the mental stuff and all of that. Labor rehearsal where you practice with ice and other things. There is plenty that you can do, but I would say relaxation, your three exercises, and staying healthy and low-risk are probably just top of the list things that you can do on a daily basis. Meagan: Oh my gosh. I love it. So good, so good. I love that you talked about preparing and then it becomes muscle memory. It's so true. It's so, so true. I encourage if you're ever in a moment where you're feeling stressed or overwhelmed to dive into that because there are going to be moments in labor and birth when you might feel stressed and overwhelmed. If you can practice doing that in those moments, oh my gosh. It's going to be so beneficial. So I know we're almost out of time, but I wanted to ask you what is a secret lesson or something no one really talks about that you wish you would have known ahead of time when preparing for time? Stephanie: That would be that you can say ‘no' to anything. I feel like I teach this all day long and I talk about it a lot. I don't know how often moms let that register because they will know that and then you'll get with their provider and they're doing non-stress tests or whatever and it's like, all of a sudden, oh crap. I need this and this and this. No. You can actually say ‘no' to literally anything. Meagan: Anything, yeah. Stephanie: Anything, yeah. They can't do anything. The best that they can do is make you sign, what is it? Meagan: An AMA. Stephanie: A medical release, yeah. AMA, against medical advice. Meagan: Against medical advice. Stephanie: Sign it. Sign it. It's your body. You get to choose. And then kind of like I talked about, when I talk about health and nutrition, I think a lot of times, moms don't register. “Okay, yeah. I get it. I'm supposed to be healthy.” But it's so you can be low-risk and in charge of your birth. I think that's a really important part of that. Meagan: Yes. I think so too. It's so hard. It's so hard to be in that moment and be like, “Uh, okay.” When you're like, “I really wanted to say no. I had a prenatal last night with a client and they were like, “One of the biggest things that we don't want to do is go in and just say yes to everything. That's one of their biggest goals is not to just say yes to everything. They're not saying, “We want to refuse everything,” they're just saying, “We want to be educated and we want to know what we're saying yes to.” It's so important to know. If you are saying yes, know why you are saying yes. And if not, it's okay to say no or “One moment. Let me think about it.” It's okay because there are times where things are going to be thrown at you and it is hard to say, “No” or actually, “I want more time” or “I'm not sure about that right now” but you can. You can. You have the right to say no. You have the right. So it's so important to know. I love that. Any last final tips for someone preparing for VBAC that you would like to give to our listeners? Stephanie: I think we've kind of touched on this before. It just really matters who you pick for your provider. I know we kind of talked about some things that warrant a red flag or time to interview somebody else or something, but really, if you've got that education and you've got that provider piece, you're setting yourself up for success. It should be somebody that supports you, not tolerates the opportunity to try for a VBAC, but somebody who believes in the natural process of birth and that having a vaginal birth after a Cesarean is more healthy and safer for mom and baby than having another abdominal surgery. I think that matters that you've got somebody that believes that way. Meagan: Totally. I love that. Oh, well thank you so much for being here with us today. I want you listeners to know that she has the three free, that's what you say, right? Stephanie: Yes, three free exercises. Meagan: Three free exercises. I'm having a hard time lately with tongue twisters. Three free exercises, so we are going to be providing that in our email. If you're not subscribed to our email, please check it out because we are going to be providing so many new things and some really exciting upcoming things with The VBAC Link are going to be happening. We are going to be providing that and then will you tell everybody where they can find you? Because everyone needs to know where you're at and follow you. Stephanie: Thank you, yes. So I too have a podcast. It is called Pregnancy and Birth Made Easy. Pregnancy and Birth Made Easy is the podcast so anywhere you listen to podcasts, you can take that in. I'm also on Instagram @myessentialbirth, Facebook, TikTok, all the things, and then if you are looking for information on the birth course or anything else in regards to where some of the podcast show notes and some of that live, it's myessentialbirth.com. Meagan: Yes and all of these will be listed in our show notes today so if you want to go follow her which I promise you that you do, go click that and give her a follow because her content is amazing. Her podcast is amazing and it's been such an honor to have you here today. Stephanie: Thank you, Meagan. I love what you do too and I love that we get to do this together. Meagan: Me too. Yeah, so before we let everyone go, I didn't really give a full, “Hey, we know each other,” but we actually were in the same doula course. We became doulas together which seems like forever ago, but it was so fun to be there and to learn. You had already had your VBACs, hadn't you? Stephanie: I did. Meagan: Yes and I hadn't yet. I had only had my two Cesareans and so I just remember you being so inspirational to me and motivating me. I was like, “Okay. She could do it. She's here. She is doing this too. We have the same interests,” and I just connected to you so much. Stephanie: Same, yeah. Well then, and now look at you with The VBAC Link. You just took off. I love it. Meagan: I love being here and I love being here with all of our listeners, so again, listeners, thank you so much for being here with us today, and thanks again, Steph. Stephanie: Thank you.ClosingWould you like to be a guest on the podcast? Tell us about your experience at thevbaclink.com/share. For more information on all things VBAC including online and in-person VBAC classes, The VBAC Link blog, and Meagan's bio, head over to thevbaclink.com. Congratulations on starting your journey of learning and discovery with The VBAC Link. Advertising Inquiries: https://redcircle.com/brandsPrivacy & Opt-Out: https://redcircle.com/privacy
Joël has been thinking a lot recently about array indexing. Stephanie started volunteering at the Chicago Tooele Library, a non-profit community lending library for Chicagoans to borrow tools and equipment for DIY home projects! It's the end of the year and often a time of reflection: looking back on the year and thinking about the next. Stephanie and Joël ponder if open source is a critical way to advance careers as software developers. This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Chicago Tool Library (https://www.chicagotoollibrary.org/our-organization) Circulate and Ruby For Good (https://github.com/rubyforgood/circulate) Glue Work (https://noidea.dog/glue) Being the DRI of your career (https://cate.blog/2021/09/20/being-the-dri-of-your-career/) The Manager's Path (https://www.oreilly.com/library/view/the-managers-path/9781491973882/) Kingship (https://acoup.blog/2022/10/07/collections-teaching-paradox-crusader-kings-iii-part-iii-constructivisting-a-kingdom/) What technologies should I learn? (https://thoughtbot.com/blog/what-technologies-should-i-learn) Learning by Helping (https://thoughtbot.com/blog/learning-by-helping) "Comb-shaped" Careers (https://killalldefects.com/2020/02/22/specializing-vs-generalizing-careers/) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we are here to share a little bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I've been thinking a lot recently about array indexing. I feel like this is one of the areas where you commonly get confused as a new programmer because most languages start array indexing at zero. And what we really have here are two counting systems, either an offset so how many spaces from the beginning of the array, or a counting system where you count 1,2,3,4. At first, it feels like why would computers ever go with the offset approach? It's so illogical. Counting 1,2,3,4 would feel natural. But then, the more I think about it, the more I've started seeing the zero-based pattern show up in everyday life. One example, because I enjoy reading history, is how we talk about centuries. You might talk about the 19th century is the Victorian age, roughly. But you might also refer to the 19th century as the 1800s. So we've kind of got these two names that are a little bit off by one. And that's because when you're counting the centuries, you count first century, second century, third century, fourth century, and so on. But when we actually go by the first two digits, you start with the zeros, then the 100s, then the 200s, 300s, and so on. And so we have a zero-based counting system and a one-based counting system, and we sort of have learned to navigate both simultaneously. So that was really interesting to me to make a connection between history and programming and the fact that sometimes we count from zero, and sometimes we count from one. STEPHANIE: Yeah, I will have to admit that I always get confused when we're talking about centuries and making the mental connection that 19th century is the 1800s. It always takes me a bit of an extra second to make sure I know what I'm hearing, and I'm attributing it to the right year. I think another example where I get a bit tripped up is the numbering of floors because, in the U.S., we are counting floors using the one-based counting system, whereas I think in Europe and places outside of North America, to my knowledge, the first floor will be considered the ground floor, and then the second floor will be the first floor and onward. So that is a zero-based counting system that I can recall. JOËL: I never noticed there was a pattern. I just thought every building was arbitrary in where it counted from. STEPHANIE: Yeah, I do think it's a cultural thing. I would be really curious to know more about the history of how those counting systems get adopted. JOËL: So that's a fun thing that I've been exploring recently. What's new in your world, Stephanie? STEPHANIE: I am really excited to talk about a new real-life update. I started volunteering at the Chicago Tooele Library, which is a non-profit community lending library in my city for Chicagoans to borrow tools and equipment for DIY home projects. What I really like about it is they use a pay-what-you-can model so everyone can have access to these resources. It reduces the need for people to buy new things all the time, especially for little one-off projects. And they also provide education to empower folks to learn how to do things themselves, which I thought was really cool. And another thing that I think might be a little relevant to this audience is that I actually first encountered the Tooele library through its open-source software, which is a Ruby for Good project called Circulate. So the Tooele Library had previously been using this software that was built by community members to do all of their lending. And I got to see it in action when I saw a librarian use it to rent out tools to community members. And then I also interfaced with it myself as a member of the Tooele Library. I've borrowed things like saws, cooking appliances like air fryers that they also had. And when I was first a guest on this show, I borrowed a microphone from them to do this podcast because I was just a guest at the time and didn't want to commit to buying a whole new microphone, so that was a really awesome way that I got to benefit from it. JOËL: It's a fantastic resource for the community. STEPHANIE: Yeah, I love it so much. If anyone is in Chicago and wants to check it out, I highly recommend it. And even if you're not in Chicago, if the idea of a lending library interests you, you can check out the software on Ruby for Good. And it's no longer being used by the Chicago Tooele Library, but it would be really cool to see it be picked up by other people who might want to start something similar in their own hometowns. JOËL: So you mentioned you're volunteering here. So this means you're going in person and helping people check out items from the library. STEPHANIE: Yeah, I did my first volunteer librarian shift about a month ago, and right now, they're in the middle of moving from one location to another, so they've had a lot of in-person workdays to get some of that done. But even before that, I had contributed a little bit to the open-source repo, which is just a pretty standard Rails project, so I felt super comfortable with getting my feet wet in it. And it was, I think, my first open-source contribution. I find that some of the other open-source software, especially developer tooling, is a little scary to get into. So this was a really accessible way for me to contribute to that community, just leveraging the skills that I have for my day-to-day work. JOËL: Would you recommend this project for our listeners who are looking to maybe get their own first contribution in open source? STEPHANIE: The Circulate project is actually on a bit of a hiatus right now. But I would definitely suggest people fork it and play around with it if they want to. I also know that Ruby for Good has a bunch of other projects that are Rails apps and have real users and are having an impact that way. So if anyone wants to get into open source in a way that feels accessible and they're building a product that people are using, I definitely recommend checking that out. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: So, as we're recording this, it's the end of the year. It's often a time of reflection and looking back on the year and maybe even thinking about the next year and progression. I'm curious since you said this was your introduction to the world of open source, do you think that working on open source is a critical way to advance our careers as software developers? STEPHANIE: That's a good question. Honestly, I think my answer would be, no, it's not critical. I think it's one avenue for people to explore and increase their impact on the community and increase their technical knowledge, especially if it's in an area that they are not quite working in in their day-to-day, but they're really interested in diving deeper in. But I do think there's sometimes a lot of pressure to feel like open source is this shining beacon of opportunity for you to dive into and that it'll bring a lot of meaning to the work that you do. And people, obviously, and for a good reason, talk about how special it is that open source is part of the industry that we work in, but I don't necessarily think it's critical. I do certainly feel inspired by people who create open-source tools or contribute to Ruby or Rails. But I don't necessarily think that it's something that should be a rule and that everyone needs to get into it or contribute to it. Because there are many ways that people can have an impact having influence on the community, and that way is one. But there's also a lot of value, even just focusing on the team that you're on and your company internally. JOËL: I appreciate the nuance there because I think like you said, we often view open source as the main thing that everyone should be doing to get ahead. And there are a lot of different ways to improve your skill and then to get ahead in your career, which are not always correlated. One kind of really basic way that I was shocked at how much it helped me was I was learning a new language, Elm. I joined their online Slack community and just hung out in the chat room and answered the most beginner questions because I barely knew the language at the time. And most of these could be found just by looking up the documentation or by opening up a REPL and experimenting with a thing and giving an answer, which are skills that, as a programmer who's got some experience, I take for granted but that not everyone has that as a reflex. Because Googling, searching documentation, crafting experiments in the REPL those are all skills that you have to learn to build over time. But answering those very basic questions over and over over the course of a few months actually taught me so much about the language, and I'm not doing anything fancy. STEPHANIE: That's awesome. I have a friend who, during a time when I think she was struggling with her confidence in her technical skill and was feeling a bit stuck at work, spent an afternoon answering Stack Overflow questions on basic Ruby and Rails, and that gave her a lot of joy. Because she recognized that she was the person Googling those questions and needing to find answers many years ago, and that was one way that she could pay it forward. And I think she had a lot of empathy, like I said, for those people who are needing a little help, and it felt really good for her to be able to provide it. JOËL: It's a way to have an impact on other people while also solidifying your own knowledge. STEPHANIE: Yeah, exactly. JOËL: So we've mentioned a couple of different ways where you can level up your skills, that might be through helping out other people online, that could be through open source. But I'd like to zoom out a little bit and look at not just improving your technical skills but thinking about career in general when you're looking out over the next 10, 20, 30 years. Do you have an approach that you like to take when you're thinking that broadly? STEPHANIE: For me, I have had trouble thinking about a five or 10-year plan because things often don't turn out the way that I envisioned them. And so I think I've come to realize that leaning into how I feel about things in any given moment is more valuable and oftentimes more accurate to what I really want. Because I can have an idea of what I want my career to look like, but the things that ring most true are what I'm feeling in the moment. And so you mentioned we're releasing this episode at the end of the year. I do tend to do a little bit of recap about how my year went if I spent it doing things that fulfilled me and made me feel good, if I grew in the ways that I wanted, even separate from any performance review. I know that this is a time of reflection for a lot of people. And I don't personally ascribe to New Year's resolutions, but I do like to think about themes or intentions. And those are things that ground me rather than setting particular goals that I may or may not achieve; I may realize I want to change. So yeah, I really recommend just sitting with yourself and spending time thinking about what you want, and that could mean a promotion, but that could also mean a more interesting project using new technology. It could mean more responsibility and decision-making power. It could mean a move into management. I think it's different for everyone. And so when people have asked me about advice or what they should do in terms of coming to a crossroads between jobs or between projects, I think that you really can't tell anyone else what is the right move for them; only they can decide. JOËL: And tech, it's such a broad field. There are so many different roles and paths you can take through it. Well, there's junior engineer, engineer one, engineer two, engineer three, that's just the same everywhere. And there's only one way forward; it's up or stagnation, and that's it. Like you really get to choose your own adventure in this industry, and that's exciting and maybe a little bit terrifying. STEPHANIE: Oh yeah, for sure. I like that you brought up the different levels and roles that you could have because I have found companies that provide a career ladder or engineering ladder that has been useful for me in the past in figuring out if the next step at the company that I'm at is what I want. And it's helpful. It's very clear to me, okay, these are the skills that I need to get promoted into this next level. But other times, that description describes something that I'm not interested in, and that is also really helpful information. JOËL: Was there ever a moment in your own career where you had to navigate some of these decisions to decide what path you wanted to take as opposed to just following a ladder up? STEPHANIE: Oh yeah. I was presented opportunities to start getting a feel for management or overseeing a team as a lead. And people had really great feedback for me that that was something that I had shown leadership in, and they thought I would do a great job in that role. But I actually decided to kind of hit the brakes a little bit on that particular route because what I realized I wanted at the time was to focus more on being an IC and deepening my technical knowledge. And that was really tough. I do also think that a lot of women are pushed into management because they end up doing a lot of the glue work that comes with unblocking people, supporting people, and project management and those are all skills that, like, quote, unquote, "lend themselves towards management." But just because we do that work doesn't necessarily mean that that's the direction that we want our careers to go in. And so that was a really tough thing that I had to do was to make it really clear that I wasn't quite ready for that yet. And I might be in the future, but in that moment, just standing my ground and being like, actually, I want to focus elsewhere instead. JOËL: That's really valuable, knowing yourself and knowing where you want to go, what the next step is. Are there any exercises you like to do to try to figure that out for yourself? Because I know something that I've struggled with sometimes is not being quite sure what I want. STEPHANIE: I journal a lot in my personal life and also about work. I think I tend to revisit that in my notes, especially about things I've learned or things that I felt excited about in terms of projects and what I've been unlearning, and just going through all of the things that I've collected over the year and synthesizing that information. I also really like to lean on my friends and peers. So I really enjoy a good one-on-one when we just talk about those types of things, you know, dreams, hopes, goals. I like to lean on my manager a lot, too, because oftentimes, they're able to see things about my work over the past year that maybe I was just too in the weeds to be able to have that higher level perspective about. As a third-party observer, they see a lot of things that you might not be able to, either on your current project or even opportunities for you to step into at a higher level in the company. So yeah, I think that, in some ways, it's a solitary activity, but it doesn't always have to be. JOËL: I remember having a really good conversation with my manager as well, at some point, talking about that decision of am I interested in maybe moving into the management track? Do I want to stay on the IC side of things? And that was a really good conversation to have. STEPHANIE: So after having those conversations and kind of figuring out what direction you wanted to go, were there times when you had to actively make that choice or advocate for yourself? JOËL: Yes. One of the things that I realized that I care about is investing in other people, and sort of the mentoring, supporting side of things which you might think is kind of a management activity. But management is a little bit different than that. I prefer the coaching aspect than the management aspect. And so what I wanted to do at some point once, I realized that that's what I wanted and that a management position would not fulfill that desire, I started looking to see is there a way to craft that role within the company? A common thing that happens, I think, in workplaces is that you are given roles or titles for things that you already do. Clearly, if there's something that I care about, I needed to be doing it already in my day-to-day work, and I needed to be doing it at a fairly high level. And so I focused efforts there, trying to say I want to get better at this. I want to do this in the opportunities that I do have in my current role. And then eventually, I did go to my manager and said, "Look, this is what I am looking for in the next step." Had a discussion about whether or not management could be a fit or if we could customize a management role for this, and eventually decided that an IC role would be a better fit for that. And among other things, we introduce at thoughtbot the role of principal developer, which is kind of the next step on our career ladder. It can be a little bit different emphasis for different people on the team who have that role, but, for me, a big part of that was putting more impact on the broader team as its focus. STEPHANIE: That's really cool. I really appreciate that you were able to come to the table with what you wanted and able to have a discussion about, okay, so management might not be the right fit. But how can we create this new role that not only benefited you but also benefited the rest of the company because that hadn't been an area that they had quite figured out yet. But by doing that, you essentially did exactly the kind of coaching and making an impact [chuckles] that you had also shared you had been wanting because you just opened this new door for others to also eventually work towards. And I think that's really awesome. That reminds me a lot of the idea of being directly responsible for yourself and your career. There's a really good blog post by a woman named Cate, who is an engineering director at DuckDuckGo. I'll link it to the show notes. But she writes a lot about how you have to own your own career and find opportunities to have that agency. And you can always ask. Like, you might not get everything that you want, but by asking and by bringing it up, you at least can start the conversation rather than expecting or just hoping that things will turn out the way that you want without having said anything. A couple of things that she says in the article that I also really like is the idea of expecting less from your job and more from your career. JOËL: Hmmm. STEPHANIE: At any given point, your job might not check all of the boxes, but maybe they check some, and that is worthwhile. And once you get to a point where maybe the job is not really doing anything towards the direction you want your overall career to go, that might be time to reevaluate. And then she also mentions learning from feedback and asking for feedback, and making sure that beyond the things that you're able to identify, learning from others areas that you can work on to have a better impact on your team is also really important in progressing your career quickly. JOËL: So how is this mindset of owning your career path maybe different than the default that a lot of people might assume in our industry? It sounds like it's a much more proactive approach. We talked already about doing the work to figure out what you want out of a career, what you care about, as opposed to just being told what you should care about by others. Are there other aspects that you have to sort of own as part of owning that career? STEPHANIE: I mean, I think it's just vital to having a work experience that is fulfilling and brings you joy and doesn't bog you down. I know we all have to work, but we also all have the capacity to exercise our agency there. I know we did talk a little about management earlier, and I wanted to also plug a book, "The Manager's Path" by Camille Fournier, which is about management. But she has a really excellent first chapter about how to be managed and what you can expect from having to be an employee with a manager but also what power you have in that dynamic. She says that while you can be given opportunities and have areas of growth pointed out to you, your manager can't read your mind, and they can't tell you what will make you happy. And so I have seen a lot of people spend time worrying about if they're doing the right things to get to the next level. But oftentimes, we just haven't really talked enough about how that next level is really totally different. And there are so many routes that that could take, whether that is becoming an open-source maintainer, or producing content like blog posts or podcasts even, or speaking at conferences, or management. Once I realized that there were so many different opportunities available to me, I did feel a bit liberated because it does seem like, oh, you're just supposed to level up your technical skills until you've become this superstar coder. But that's not what everyone wants, and I think that's okay. JOËL: And, like you said, there are so many different areas where you might choose to focus or invest time into, and you don't have to do them all. You don't have to be the super prolific open-source person, and also keynoting at conferences, and also publishing the book, and also, you know, whatever you want to add in there. So once you know your goals, how do you make those goals a reality? We've been talking a lot about know yourself and have some goals. But at some point, you have to translate those goals into actions that will take you one step at a time towards those goals, and sometimes that translation step is hard. STEPHANIE: It is hard. I think this is another place where I would work with my manager on, especially if I'm on a project where I'm not quite seeing those opportunities. Like I said, usually having another perspective or another set of eyes on what you're working on can make it clear, like, specific and concrete aspects that you can spend your energy on. So if it's wanting to get better at testing, it's like, okay, what does the current test suite look like, and what are some opportunities that you can provide new value to the test suite to make an impact on the team? Or what are some refactoring opportunities you can make if you are wanting to have more of that experience outside of the regular ticketed feature work that you have to do? JOËL: I think it's interesting that you mentioned impact on the team because not only do you want to level up some skills, but if nobody knows about it, your odds of getting that promotion or getting recognized for it are very low. So not only do you have to get good at technical systems, you have to get good at social systems as well. I was recently reading an article about the role of kingship in medieval Europe and how it's very much a role that needs to play out in public in order to build legitimacy so that people will do what you say. You need to be seen to do the things that everybody has in their mental kind of checklist are things that a good king does. And some of those are somewhat divorced from the reality of what actually is effective governance. It could be various public rituals that you do that people see and are like, oh yes, you're doing this parade every year. You're looking the part of a good king; therefore, I think of you as a good king. It could be military campaigns because there are a lot of those in the Middle Ages. And there's this interesting cycle where kings that have long and effective reigns then get to influence what the next generation of kings are going to have to do in order to look legitimate because people will point back at you and be like, well, Stephanie was an effective ruler, and she did X,Y,Z. And so, in order to look the part of an effective ruler, you should be doing those same things. STEPHANIE: That's fascinating. In some ways, I struggle with the idea that you have to prove that you're, you know, doing the kingly things and worthy of that title. But I do think that there is some degree of truth to that in your career as well, where you want to make sure that the work you're doing is visible. And you also just, in general, bring up a really good idea about the importance of leadership in career progression. And I think that in my experience, and from what I've observed, that is a vital way to progress your career is to just start demonstrating leadership qualities, and that could look like reaching out to new team members and helping them with onboarding. That could mean updating the documentation, just taking the initiative, and doing that. That could also mean starting to voice more of your opinions about risks or red flags about a certain technical implementation or a project because you have amassed the experience to be able to make those decisions and put in your two cents and then making sure that the choices that are made are the right ones. JOËL: Additionally, I think even when you're doing things that are a little bit more inward-focused, like learning something new, you can generally find some kind of artifact that you can take and share more broadly with a team. So maybe you experimented with something, and you wrote up a small code example to showcase the thing that you're trying out; make a Gist on GitHub and share it with your team. If you learn something new, maybe write a blog post about it. Maybe even just start a thread in Slack and start a conversation on something that you learned recently. These can be really low effort, but I always look for opportunities to take things that I have learned, things where I'm sort of working a little bit more inwardly on myself and see how can I share that with the rest of the team? Both because it benefits the team, they get to benefit from the impact of some of what you've done but also, it helps a little bit with making sure that your work is visible. STEPHANIE: Yeah, absolutely. JOËL: So we've been talking a lot about improving ourselves technically, but there's one question that we've danced around that we haven't actually addressed, and I'm curious about your thoughts here. For someone who's early career, do you think it's more valuable to be a specialist, someone who goes all in deep on one technology and becomes great at it? Or is it better to go more broad, become a generalist, and know a little bit about a lot of things? From the point of view of what will help move my career forward. STEPHANIE: I personally do think there is an aspect of being a generalist for a little while, a few years maybe, to get a taste of what is available to you. I think that is valuable before really committing to decide, okay, like, this is what I want to specialize in. Honestly, as a generalist myself, I still do feel a bit like I don't know what I want to dive deep into and commit myself a little bit to being like, okay, I'm going to have to sacrifice learning all of these other things to really focus on this one aspect. So I have found that being a generalist also kind of gives me the flexibility to work on different projects that might require learning a new language, or at least one that I am less familiar with. And I know that that's a skill in and of itself, being able to move on to different things and gather information and the skills you need to start contributing and working effectively quickly. So, honestly, I think I can really only speak to that experience, but it has served me well and is, for the most part, enjoyable to me at this present moment. What about you? Do you have any thoughts about generalist versus specialist? JOËL: I think, in a certain sense, there's no right answer. Like we said earlier, there are multiple paths to a career in tech, and you can go through both. I think something that I've seen be less effective, especially very early career folks, is trying to go too broad, jumping on every new language or framework every couple of weeks, every month, and just dipping your toe in it and then moving on to something else and never really learning deeply, or synthesizing, or building a mental model of things. And so you're kind of stuck in the shallow end forever, and it's hard to break through into that initial level of expertise. So I think, especially very early career people, I tend to recommend pick one language or technology and focus on getting good at that and then branch out. And, of course, you're never doing everything in a vacuum because there are a bajillion dev skills you need to learn beyond a language or framework. So I often categorize three areas to focus on that I like to recommend for people; one is pick a primary language or framework and get good at it. Two, learn some evergreen skills, these are things like version control, so Git, SQL, using the command line. And these are not things that you need to master on day one because you're going to use these your entire career. So learn a few things, move on, come back to them next month, learn a few more things, and just keep coming back there every now and then over the course of your entire career to deepen those skills, and that will serve you very well. And then, finally, some random thing you're interested in. I find that I learn so much faster and so much more deeply on topics that I'm interested in or passionate about. And that interest can be very random sometimes, and it can also be fleeting. It can be, oh, I was interested in a thing for a little bit, and I dug into it, and then I moved on to something else. If I have a career or learning plan, I like to leave that room for spontaneity to say there will be things that are maybe not strategically important as my next step, but I can learn them because I'm interested in them because they bring me joy. And then later on, maybe that will actually be the foundation of something important two years down the line where I can draw on that knowledge. STEPHANIE: You bring up a really interesting point. I do think my interpretation of generalist did line up more with the idea of those evergreen skills. So I think also about debugging and testing, and those are just part of the things that you're doing every day. And that might look different from project to project depending on what language or framework you're using and what testing philosophy people on your team abide by. But yeah, those are areas that I do think investing in will serve you well across projects and help put you in a position where you can jump into anything and be like, okay, I have these core foundational beliefs and skills about this work and now, okay, let me figure out how to apply them to the task at hand. JOËL: Are you familiar with the metaphor of the T-shaped developer? STEPHANIE: I don't think so. JOËL: So the idea is that you want to balance out a broad set of skills that you're a generalist at, that you know a little bit about them with a few things that you are a deep expert in. So you have that horizontal bar, but you also have a deep area of expertise which creates a kind of a T shape. In a sense, maybe that's just trying to say, like, do both. But I was recently reading an article that was advocating for not only a T-shaped developer as a sort of starting point but then also beyond that, over the course of a long career, you have plenty of opportunities to develop more than one specialization. And so now you start having a very broad base of general knowledge as well as multiple areas that you have spent significant time becoming an expert in. And this article referred to this idea as a comb-shaped developer, and that's something you work up to over the course of years or decades in tech. STEPHANIE: That's very cool. I love the idea that you might start out as a T-shaped but what you're doing is kind of like adding to your harness of skills and it being an additive process. You'd have more teeth in your comb [laughs] rather than it replacing something or a set of skills. On that note, shall we wrap up? JOËL: Let's wrap up. STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeeee!!!!!!!!! ANNOUNCER: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.
Joël discovered Bardcore. Stephanie planned and executed an IRL meetup for folks in the WNB.rb virtual community group in Chicago and had a consulting win. Together, they discuss what deployment processes look like for clients in their current workloads. This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. Hildegard von Blingen YouTube Channel (https://www.youtube.com/c/Hildegardvonblingin/videos) Hildegard von Bingen - Historical Character (https://en.wikipedia.org/wiki/Hildegard_of_Bingen) WNB.rb (https://www.wnb-rb.dev/) git flow (https://nvie.com/posts/a-successful-git-branching-model/) Transcript: STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn. JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way. STEPHANIE: So, Joël, what's new in your world? JOËL: I've been getting into something that's kind of fun and quirky. It's a new musical genre called Bardcore. STEPHANIE: Bardcore. JOËL: Yes, it's basically re-mixing pop songs to make them vaguely more medieval, oftentimes using acoustic instruments, something that sounds a little bit more like maybe a lute in some flutes, oftentimes also kind of changing the lyrics a little bit to use more old-timey language. When the lyrics use words from modern life, sometimes changing them to something that would fit more in a more medieval setting. It's a lot of fun. STEPHANIE: That sounds so fun. When are you normally in the mood to listen to Bardcore? JOËL: It can be fun while coding because it's fairly chill as a genre. Honestly, I feel like it can also be good when I'm just sort of feeling a little bit nostalgic or daydreamy. I think it's good for that mood as well. STEPHANIE: I love that. I can't wait to go and listen to some Bardcore after this. JOËL: Let me recommend the YouTube channel Hildegard von Blingin' as a great entry point into the genre. STEPHANIE: Incredible. I can't wait. In fact, I'm going to end up sharing it with all of my D&D friends too. [laughter] JOËL: The channel is a play on words of an actual historical character, Hildegard von Bingen, who is, I want to say, a 12th-century nun but also a polymath. So she wrote on all sorts of topics, from biology and the natural world to theology. She was a musician, just one of these like really talented people that made a mark on the medieval world. So it's kind of fun that they used her name as the inspiration for the channel. STEPHANIE: Yeah, that sounds right up your alley. I knew that you were going to come with a historical tidbit about Bardcore. [laughs] JOËL: Another really cool thing that I appreciate about the channel is it's not just audio. It's also beautifully illustrated. So the creator has created visuals inspired by medieval manuscripts illustrating the contents of the song. So it's kind of funny to see something that...modern pop songs aren't always the most deep lyrics, and to see them given this medieval manuscript treatment is amusing, for me at least. STEPHANIE: That sounds really funny and also kind of calming. I was just thinking about what you said earlier about how they sometimes rewrite the lyrics to be more about medieval life. And I love the idea of taking the things that pop songs are about these days and applying them to historic life back in the day. JOËL: A lot of pop songs also are about love, and romance, and breakups. I think that kind of fits with some of that 12th-century troubadour-style romantic songs because that was definitely the kind of thing that they were singing about back then as well. STEPHANIE: Absolutely. JOËL: So I've been jamming out to Bardcore this week. What is new in your world, Stephanie? STEPHANIE: I'm really excited to share that I had an awesome weekend. One of the things that I had been doing the past couple of weeks was planning an IRL meetup for some folks in Chicago, people in the WNB.rb virtual community group. I've mentioned it on the podcast before when I was a guest. But WNB is a Ruby community group for women and non-binary folks. And we just started creating regional Slack channels. And so I started a little Chicago channel and planned a brunch. So on Sunday, a few of us, I think it was six, some old friends and some new met up for brunch in Logan Square in Chicago. And it was really awesome to do a local meetup. I haven't done something like that since pre-COVID times, and so it felt really special. JOËL: That's exciting. Were you big into the meetup scene pre-COVID? STEPHANIE: So I was working remotely for a previous company when I moved back to Chicago, and so was still trying to meet people here, find a community, find some friends. And I did go to a few community groups, but that was not too soon before COVID started, and so I didn't get to really invest in them the way that I had hoped. So it's really exciting to me to potentially be able to start doing that again. JOËL: This new meetup that you were at, was it focused more on the social aspect of things, or was it a more technical meetup? STEPHANIE: It was definitely more of a social aspect. I would be really curious to know if that group would want to focus on some more technical things. But we had a nice diversity and experience levels and the types of work we were doing. So there were a few of us who were consultants, a few of us at product companies. And I think we shared a lot about our different experiences. We talked a bit about the pros and cons of product versus consulting. And so it was really nice to just learn more about what other people are up to, what tech and framework people are using, and chat casually in that sense. But I also definitely see some more opportunity to focus on technical stuff if that moves us. JOËL: I think that was probably my favorite part of Ruby meetups back when I was attending those a lot here in Boston, where I'm based, getting to chat with other developers in the city, hearing about their experiences on different topics. And oftentimes, it will sort of revolve around tech to a certain extent, but it's not always like a formal have a presentation. Sometimes just socializing is almost more fun or brings more value to me. STEPHANIE: Yeah, I totally agree. I also wanted to share another thing that happened to me this week. It was a bit of a consulting win. So on my client project, we have been having retros every two weeks at the end of the sprint. But I was noticing with a fellow thoughtboter that we weren't really getting a lot of engagement in retros. It was kind of the same folks speaking and bringing up issues because we were doing it in a style that was like a retro board, and then folks could write in cards or raise their hand in the meeting to add something to one of the columns. And so, we ended up proposing to do a round-robin style format for retro. And we just had our first one yesterday using that new format, and it was received really well. Everyone went around and shared things that went well. And then, we went around again and shared things to improve or risks or concerns that we had about the sprint. And it was really nice to have everyone participate, to hear folks piggybacking off of what other people said. And I think we were able to get a better sense of what the group was feeling. And yeah, there was a new hire who was just observing our retro, and she is going to be facilitating these kinds of meetings for other teams. And she seemed really into it and wanted to bring it over to other teams as well and try it there. And so that felt really good to know that we were able to make a change that was an improvement for our team but might even have an impact on other teams at the company as well. JOËL: I love that. I think a lot of what we often bring to the table, because we've seen things at a lot of different companies, is not just code improvements but also process improvements. Every company is different, so you can't always just copy-paste things from one place to another. But being willing to try new things, experiment, and then follow this iterative, continuous improvement approach, not just with the code but with the process as well, I think, is something that is really valuable in the work that we do for our clients. STEPHANIE: Yeah, absolutely. JOËL: And it sounds like here you iterated on their retro process. And everybody seems to really like this new iteration, so that sounds like a big win. Congratulations. STEPHANIE: Thanks. I really appreciated that they were open to trying. That made me feel really good and makes me feel empowered as a consultant to be able to like you're saying, leverage that experience and suggest things that can just improve the quality of life for our clients. JOËL: Another area that I think we've seen a lot of different ways of doing things, and we've actually been able to iterate a lot as far as process goes, is deployments. How do we get our code from, let's say, passes code review, and then, at some point, we want it to go live in production? So what does deployment look like on your current client, Stephanie? STEPHANIE: I'm glad you asked because I'm experiencing a deployment process on this client that's actually a bit different than what I have seen before. So this client is not a super big team, but maybe, I don't know, between 30 or 50 engineers would be my guess. I am working on a smaller team with just four developers. And so I'm seeing a lot of code get merged into our big Rails app pretty frequently by other teams. And we are also merging to the same app. So my client has release managers who rotate each day and go through all of the different teams' pull requests that are ready to be merged. They will merge those pull requests on the developers' behalf. And then once everything is merged into an integration branch, they will then merge all of that stuff into their production branch and kick off a deploy. JOËL: Wow. So does that mean that developers on your team don't merge their code? You just when you get an approval, you ping the release manager and ask them to merge it for you? STEPHANIE: Yeah, so developers don't merge their own code. We might move the card into ready for deployment, and that's how release managers know that that PR is ready to be merged. JOËL: And are you then following something that's roughly like Git flow where you've got this sort of development branch, and then at some point, commits get maybe cherry-picked over to the main branch, which then gets released? Or maybe it's even a special dedicated release branch. What does that look like in terms of the Git workflow? STEPHANIE: Yeah, we have that release branch that you mentioned that eventually gets merged, either through the GitHub GUI or a CLI by the release manager, into the main branch, essentially. And that's what then gets deployed. JOËL: How do you handle situations where a feature goes out to production, and then you realize that there's a bug or there's something that you don't like about it, and you would like to revert that feature? STEPHANIE: Yeah, that's a great question. This has happened to me once now, where I merged some code that ended up introducing a regression. And unfortunately, I wasn't tagged or pinged, so I didn't really know about this until the next business day and caught up with Slack and saw that someone else had to resolve my issue, which was kind of a bummer, I think, because with this process, once that code is, quote, unquote, "done," since I'm not the one merging it, and I'm not the one deploying it, I don't get a chance to follow up on the changes in production and then check to see if they look good. When things go wrong, it seems like it kind of takes a bit of time to figure out how to get it resolved like; who would have the context? And then, if they're not available, someone else might have to jump in and fix it. So it's been interesting because, on one hand, I totally understand that they want to be releasing just once a day. Like, it's nice to have a dedicated person do all of this stuff that is work and would take away time from normal development. But I do sometimes feel like I don't have as much ownership over my feature with this process because, like I said, it just kind of is out of my hands. And oftentimes, I might be done with my work, but that doesn't get deployed for a few days depending on other things going on with the team. JOËL: That's interesting that you mentioned that it might not be deployed for a few days even though it's done and maybe merged. I think, generally, we assume that merging a commit into the main branch and deploying it are going to be more or less the same thing. But oftentimes, you might end up in a situation where there's a feature that's done in development, but we don't want it to actually go live for our customers for a while yet. And that might be for technical reasons because we're waiting for other pieces to be in place, or it might be for business reasons because we did the work, but this feature has to come out on a particular date, and so that's when it's going to go live. So then you end up in that awkward situation, maybe where you want to deploy something else. But you've got a commit already on the master branch that can't go out with the others. And you've got to do an awkward cherry-pick. Have you ever been in that situation? STEPHANIE: I have. I remember being on a project where we had features in our main branch, but that hadn't been deployed to users yet. We actually didn't want that to be live yet but then had an issue with an existing feature that was already live that we had to make a hotfix for. And that was definitely one of those cherry-picking situations that did become a bit hairy and wasn't too fun. It sounds like you have had experience with that type of deployment process as well. JOËL: Yes, I think of a project where that was a very common problem because there were a lot of features on that project that were gated to a particular time. So a lot of the features going live for customers were decoupled to the actual development lifecycle. And on that particular project, we used a lot of feature flags on the commits. So we'd control whether or not a feature was live for the customer. It wasn't, is this commit in the main branch, but it was, is this feature flag on or off? STEPHANIE: Yeah, we're using feature flags on this client project as well. And so, in some ways, I think that if we did have a more continuous deployment process, it would be okay because this big feature that I'm working on on my team we're not trying to go live until a month from now, but we have been slowly, incrementally pushing features underneath the flag. But even then, we do still have a bit of an async process because of this daily release flow. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: How do you feel about continuous deployment in general? STEPHANIE: So the reason why I found the way I've been describing so surprising is because I am more used to a continuous deployment flow. When I used to work for a product company, and we were a team of, I don't know, like 30 engineers, we'd merge our own work. And then our main branch would automatically be deployed. And so we could make sure our changes looked good in production and then feel a sense of we finished this feature. But we did also run into problems there because our CI build time which had to run for every single time that code was merged into main, took maybe 20-25 minutes. So whenever we merged to main, we would have to wait for CI to build, wait for the deploy to go through, and that might be a few extra minutes depending, and then confirm our changes. And that became more of an issue when there was a backup in the queue of a lot of people trying to merge code. And it's funny because we kind of want to be constantly merging. That's kind of a sign that things are moving along. And it ended up being that deployment was the bottleneck in some instances, especially if there was a CI build that broke, and then it was kind of like a car crash a little bit where there was this huge backup. That wasn't great either because when you have to babysit your deploy like that, I didn't find that I had a ton of focus time to go and pivot to something else. I was just keeping an eye on things the whole time. JOËL: Would you have preferred a workflow that maybe didn't run on every commit but maybe ran once every 30 minutes and just bundled any commits that happened within that? So maybe it's one commit, maybe it's four. Or would you have maybe preferred one where you didn't run the tests before deploying? You're just like, you know what? We trust that we ran them on the branch. It's good. We can just go straight to production. STEPHANIE: Well, that idea, the second one of not running tests before deploying, I've never even thought about that. I think that it does provide some value because when you integrate changes into main, sometimes that might cause unexpected issues. So I think, in my experience, the times when CI failed, it usually was for a valid reason, and it wasn't just a blocker that we then had to retry the build for. But what you were saying about bundling commits or a set of changes and then deploying on a scheduler maybe a few times a day automatically, that sounds really interesting to me. I have never worked on a team that has done it that way. But that sounds like it could be a good, happy medium between the two processes. JOËL: I think that's effectively what the release manager is probably doing manually. But if there was a way to just do that automatically where you just say you merge to the main branch anytime you want, but on a timer every 30 minutes, the latest main will be run on CI, and if it's green, it will get promoted to production. STEPHANIE: I think there's still a sense of whose job is it to follow up if something goes wrong in that sense. JOËL: That's a good point. I think part of that is also it's a coping mechanism because of the slow test suite. We have a big process smell here, and we're trying to find some ways to get around it. And one way where I don't think any amount of process is going to help is when you have to do a hotfix. So let's say there's a really bad bug in production. We need to get that fix out now, and so I make that fix. I live ping you to review it. We get it done in like 10 minutes, and we merge. And now we've got to wait 20 minutes for CI to pass before we can make that patch go live. And we're really hoping this test suite is not flaky because if not, we might be waiting another 20 minutes. And so, in a sense, a slow test suite becomes a huge bottleneck to fixing emergency things. And now we're going to be tempted to say, "This is an emergency. We're going to bypass CI and just ship directly to production because this is on fire. We are corrupting customer data or something. This needs to be fixed now." And hopefully, we did not make the problem worse in our hotfix because we were rushing, which I have definitely done. Luckily, in these situations, it has gotten caught by CI. But there have been situations where I've tried to do a quick hotfix that I thought was going to fix things, and then CI caught it, and I was like, I'm glad I didn't just put that directly in production. STEPHANIE: Yeah, I think what I've come to realize is that the current process that I am experiencing on my client project, you know, I'm sure there's some history there about how it came to be and why they decided to do it that way. And that might be an artifact of something going wrong and them trying to put guardrails to prevent problems from showing up in production. So I do have some understanding there. So if anyone out there has a deployment process that they love, I would love to hear about it. You can tweet us @_bikeshed or send us an email to let us know if you have a deployment process that works well for your team. JOËL: Maybe we'll even feature it on a future episode. STEPHANIE: Yeah, definitely. JOËL: I'd like to get into some of the trade-offs that come with different processes, and one that jumps out at me from what you were talking about earlier is the impact of team size. With a smaller team, when you're, you know, 2,3,4,5 developers, you can have a really simple Git-based approach where merging a PR goes directly onto your main branch and maybe even have it set up to automatically deploy, and that's kind of it. If a commit is on main, it is live in production. And if you want to undo something, you just Git revert, and that goes live. And that's a really simple, effective workflow. But then, as the team starts growing, you start needing something a little bit fancier because there are a lot of commits coming out at once. They might have dependencies on each other. Reverting becomes a little bit more complicated. As the product gets more complicated, too, then you start having to want to have work that's done, but you don't want to just have a PR sitting around waiting until go-live day. So I think that's definitely an axis to think of when you're thinking of trade-offs is some workflows work very well for smaller teams and others are a better fit for larger teams. STEPHANIE: Absolutely. I think when you were talking about smaller teams, almost everyone has knowledge about what is currently being worked on. And so when problems do happen, that work of reverting or figuring out what went wrong isn't as hairy because most folks on a small team would know what changes are being merged and can pitch in to help there. But yeah, I am really interested in the transition between a small team where you feel comfortable just merging the code and having the automatic deployment and when you do need to have a heavier-handed solution, I suppose. Do you think that there's an inflection point that pushes that decision to be made? JOËL: I'm not sure exactly where that inflection point is. I might say as low as maybe 5 or 10 developers on your team, but there are probably some other variables that go along with that. Part of it might even be how good your team is at keeping commits small and focused, and independently deployable. If your team is committing really large commits that potentially break the build or that are tightly coupled to other commits, that might make it really difficult to say that your branch is always deployable. And so, you might want to bring in a heavier process earlier. Whereas if your team is doing a lot of small, atomic commits, which I think we discussed this on last week's episode, I think that could probably allow you to get a lot more mileage out of a very simple workflow where even with a slightly larger team, you're still able to just merge and deploy and also potentially revert very easily because these are atomic commits. STEPHANIE: Yeah. I like what you said about how you can get away with a lighter solution if you are really investing in things like making sure that each commit is green on CI. Because, you know, kind of what we were saying earlier, sometimes adding additional process without really figuring out what we're trying to solve here can lead to some of those trade-offs that we're talking about. JOËL: Agreed. I'm a big fan of using the simplest process that your team can get away with. Maybe we could even extend that more generally to just use the simplest thing that your team can get away with. I think that goes for code complexity, that goes for maybe code optimization. Don't make it more complex just because you're hoping to have this massive scale one day because you don't need it today. So use a process that works for your team at your current team size, and then you can iterate on that and start adding more complex elements as the team starts growing. So, Stephanie, I'm curious; we've talked about a lot of different types of deploy processes. What would be your ultimate favorite way to handle deploys if you had the choice? STEPHANIE: I think I do prefer a more automated process. When I was on a medium-sized team, that was working pretty well for us. We were having deploys be kicked off when we merged to main, but then we had a Slack integration that would tell us, "Hey, your thing is being deployed." It would tell us the results of the CI build, and it would tag us if something went wrong. And so I think that was nice in solving that issue of ownership that I had mentioned where I knew that, oh, there was an issue. I have the most context, and I can solve it the most quickly on this team. And then it was also good to just see what was going out, see what other people were working on. I liked that it made that very transparent. And that sense of feeling like you saw your feature from start to finish and seeing it live on production felt really good and gave me meaning in my development work. JOËL: Yeah, that sounds like it hits a lot of really positive values, like you said, that ownership that you have from beginning to end, even with maybe the revert if something has to happen, the transparency where you get to see if any issues came through. And then the automation and the simplicity because it's just merge your PR and the work goes out. Earlier in the episode, we were talking about trade-offs that come with a workflow. So a workflow like what you're describing, what size team do you think would be best suited for a workflow like that? STEPHANIE: Yeah, I don't know if I have an exact number. I did mention that medium-sized team seemed to feel pretty good where we did have some investment in the infrastructure in place, so, like you were saying, we had guardrails when things went wrong. But it wasn't so much for a really large team where it would have been too noisy in the Slack channel. And also, merge conflicts would come up if we were merging a lot of work during the day. And that did interrupt that queue and that flow and became something that we had to manually work through sometimes with other developers if that was their code that we had conflicts with. And so I can see it also start to not work past...I think I mentioned that the team was 20 to 30. I would be really curious to know how far that can take a team as it grows. JOËL: So, 20 to 30 people, this workflow works pretty well. What about sort of maybe experience level? Do you think this is a workflow that requires a certain level of seniority? You're talking about merge conflicts a lot, so maybe a team that is very disciplined with keeping their commits small. Do you think that's required to make this workflow work well for the team? STEPHANIE: That's a great question. When I was on this team, we did have people with all experience levels. And what I really liked was that it was okay if there were merge conflicts. It was okay if CI was red. People were super helpful in jumping on to work with you to figure it out, also, because they probably had things in the queue that they were waiting to try to go out. But it felt like a team culture where we were all committed to releasing our code smoothly. And so sometimes merge conflicts would happen, but, like I said, you usually could see it and could jump in to help out if someone was maybe stressed out about it or needed an extra hand. JOËL: I love the process you described. And the culture that your team had didn't require everyone to get it right all the time. There's room for mistakes or not even mistakes, but just less experience where you don't always know to scope everything super tightly, or your Git process isn't quite perfect every time. And that's great for a team because there's room to grow, room to bring in people of different levels of experience. STEPHANIE: Yeah, I also think it's more realistic. JOËL: Oh, 100%. I'd like to look at one more axis of trade-offs, and that is product type. What kind of product do you think that this workflow you described would fit well as opposed to maybe a different type of product that wouldn't be as good of a fit? I think what comes to mind for me immediately is maybe situations where you do a lot of work upfront, but then you only want it to go live for clients later, but you do want it merged. And so you decouple the Git history from actually releasing to customers. So that's a product lifecycle that might be a little bit different. It could be a product where you even just do big releases at set intervals. So people don't want continuous change, but you're like, once every season, we release the new version or something like that. STEPHANIE: Yeah, I was thinking that the continuous deployment process worked well for that team who was building a product that was very customer-facing in the sense that people were visiting the site every day. And they were running a lot of A/B tests on those customers as well. And so that was helpful because we could be releasing those tests iteratively and getting continuous feedback that way. JOËL: So, as we discussed in this episode, no process is perfect. There are always trade-offs. So I think it was really fun to look at a concrete example of a process that you liked, Stephanie, and then look at maybe some of the trade-offs for when does it work and when does it not work so well? And with that, shall we wrap up? STEPHANIE: Let's wrap up. Show notes for this episode can be found at bikeshed.fm. JOËL: This show has been produced and edited by Mandy Moore. STEPHANIE: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. JOËL: If you have any feedback for this or any of our other episodes, you can reach us @_bikeshed, or you can reach me @joelquen on Twitter. STEPHANIE: Or reach both of us at hosts@bikeshed.fm via email. JOËL: Thanks so much for listening to The Bike Shed, and we'll see you next week. ALL: Byeeeeeee!!!!!!! ANNOUNCER: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.
As developers, we care a lot about code quality. How do we know how good is good enough? When do we stop improving code? Alternatively, when working on code that's really bad, how much do you improve it before calling it a day? thoughtbot's Stephanie Minn joins Joël to chat about this and case expressions: We recently discussed these as part of thoughtbot's RubyScience reading group. Are case expressions bad? Are they equivalent to multi-way conditionals? When do you use polymorphism? This episode is brought to you by Airbrake (https://airbrake.io/?utm_campaign=Q3_2022%3A%20Bike%20Shed%20Podcast%20Ad&utm_source=Bike%20Shed&utm_medium=website). Visit Frictionless error monitoring and performance insight for your app stack. RubyConf 2022 (https://rubyconf.org/) RubyConf Mini (https://www.rubyconfmini.com/) Stephanie's talk at RubyConf 2021 (https://www.youtube.com/watch?v=m0dC5RmxcFk) WNB.rb (https://www.wnb-rb.dev/) Joël's RailsConf 2022 talk (https://www.youtube.com/watch?v=LOlG4kqfwcg) Ruby Science (https://books.thoughtbot.com/books/ruby-science.html) older episode on wizards (https://www.bikeshed.fm/295) TCR (https://www.honeybadger.io/blog/ruby-tcr-test-commit-revert/) Transcript: JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville. And we're here to share a little bit about what we've learned along the way. Today, I'm joined by a fellow thoughtboter, Stephanie Minn. STEPHANIE: Hi, Joël. JOËL: Welcome to the show. STEPHANIE: Thanks. Happy to be here. JOËL: Stephanie, what's new in your world? STEPHANIE: Thanks for asking. I've been working on writing a CFP for RubyConf, which you have been plugging internally at thoughtbot. I wasn't really sure if I wanted to do it, and then I found out about RubyConf Mini, which is happening as an alternative to the main conference in Houston. And that got me really excited to have some more options and just got me thinking about what I might have sitting on the back-burner that I might want to give a talk about. JOËL: That's really exciting. I'm curious, what is your process for coming up with an idea for a talk? STEPHANIE: I think they come in seasons, ideas, for me, so not even necessarily when it's conference time. But if something has been sticking in my brain for a really long time, especially as it relates to processes on teams that I'm on or my day-to-day workflow, and it's something that I keep coming back to and trying to figure out what it is about it that my brain wants to work through a process, that usually tips me off that this might be something that other people are thinking about or working through. In this case, I am planning to write a CFP about pair programming. And yeah, it's something that I've been thinking about doing for a while, and it seems kind of an evergreen topic. So I thought I would pull it out for this conference. And if it doesn't end up getting accepted, I can always resubmit again in the future. JOËL: I love that. So it sounds like you have a note or maybe an actual written notepad somewhere where you just, over the course of the year, build up ideas, and then you take a look at that when conference time comes around. STEPHANIE: Yeah, that's about it. I have just a very long-running note of half-formed thoughts. And then, when I give myself time to really reflect on how things have been going at work, I usually revisit it, and if any of them still resonate or stand out to me, I will go through and try to see if there's any content to come out of that. What about you? I know you are an extensive note-taker and ideas blogger. JOËL: I have to say I really like your approach of gathering ideas throughout the year. I've worked with many people who would love to give a talk at a conference as a professional goal but then get stuck in the I don't have any ideas. I don't know what I would talk about. And most people have a thing they could talk about. They just don't know it. And it sounds like you've done a really great job of gathering this info throughout the year so that when the time does come, you don't just freeze. You're like, no, here are the 10-20 things that I experienced or that I am an expert in or that I would love to share. And maybe there are two or three in there that would be very well-fitted for the conference you're looking at. So I love that idea. I have not done that myself personally, but maybe I should start doing that. STEPHANIE: What about you, Joël? What's up in your world? JOËL: So I've also been thinking a lot about RubyConf coming up, working on a few ideas for myself. And then, there are a few people that have reached out to me to help them craft ideas or get a little bit of feedback on their proposal. So I've been doing a lot of proposal reviews as well. STEPHANIE: What do you enjoy about reviewing other people's proposals? JOËL: I think for many people speaking at a conference is a really big, ambitious professional goal, and so helping people achieve that is really fulfilling for me. Some people might feel almost inadequate or unprepared. But because I know them, I know they've got good things to share. And so it's almost seeing the greatness in them that they don't quite see yet or that they don't feel confident about. And so being able to see that in their proposal and say, "Oh, there's a core of a great idea right here, tweak it a little bit, and that'll give you a slightly better chance with the committee and help you towards that path of being on stage for the first time," is really exciting. STEPHANIE: I spoke at RubyConf last year, in 2021, virtually. And I remember that was my first time speaking at a conference. And I was worried that my talk was not super hardcore, technical enough. But my goal for my talk was to aim it towards other developers like me who are maybe mid-level and wanting to reach this whole audience of people who are attending these conferences to learn and to level up who aren't necessarily super senior experienced developers. And it was a really great experience. People seemed to really resonate with that. So I really encourage folks to speak about things that are resonating with them at whatever point in their careers because there are so many people out there who are probably in the same boat and want to hear what you have to say. JOËL: Absolutely. I'm curious, now that you have experienced the full cycle at least once, from ideas to crafting a submission, to getting accepted, preparing a talk, delivering the talk, and then recovering from that, what are maybe some lessons learned or some things you weren't expecting the first time you went into that that now you do know going into another cycle? STEPHANIE: Yeah, the power of community; I had a lot of support from WNB.rb, a woman and non-binary Ruby community. We crafted our CFPs together and then practiced our talks together and had a working group that met every couple of weeks to give feedback on our talks as we were working on them. And it was really awesome to have that accountability, to have that support, people to tell you that your talk is good and give you a thumbs-up. And I really want to continue investing in my community that way. And I really appreciate you asking this question because I guess I do have things I've learned and would want to share that with other people in my community, and yeah, just continue to encourage folks who may not have been traditionally encouraged to speak at conferences. JOËL: Community is so powerful. Even though I've spoken at multiple conferences, I still get nervous about my talks. I have a lot of self-doubt about whether my topic is good, whether I'm sharing it in a way that's going to be impactful. And I had a magical experience at RailsConf this year where a group of us were at a hotel lobby practicing our talks the night before. And I was just still so unsure about my talk. And the feedback that I got there gave me a huge boost of confidence that I was able to ride into the next day and give a talk that I think turned out rather well. But honestly, that was my favorite moment of the conference was 11:30 p.m., a group of people in the hotel lobby taking turns practicing their talks. STEPHANIE: Yeah, I love that. MID-ROLL AD: Debugging errors can be a developer's worst nightmare...but it doesn't have to be. Airbrake is an award-winning error monitoring, performance, and deployment tracking tool created by developers for developers that can actually help cut your debugging time in half. So why do developers love Airbrake? It has all of the information that web developers need to monitor their application - including error management, performance insights, and deploy tracking! Airbrake's debugging tool catches all of your project errors, intelligently groups them, and points you to the issue in the code so you can quickly fix the bug before customers are impacted. In addition to stellar error monitoring, Airbrake's lightweight APM helps developers to track the performance and availability of their application through metrics like HTTP requests, response times, error occurrences, and user satisfaction. Finally, Airbrake Deploy Tracking helps developers track trends, fix bad deploys, and improve code quality. Since 2008, Airbrake has been a staple in the Ruby community and has grown to cover all major programming languages. Airbrake seamlessly integrates with your favorite apps to include modern features like single sign-on and SDK-based installation. From testing to production, Airbrake notifiers have your back. Your time is valuable, so why waste it combing through logs, waiting for user reports, or retrofitting other tools to monitor your application? You literally have nothing to lose. Head on over to airbrake.io/try/bikeshed to create your FREE developer account today! JOËL: One thing we've been doing recently at thoughtbot is every other week book club discussion, and we've been looking through the book Ruby Science published by thoughtbot. Every week, we'll have someone who is a facilitator, who has done the reading and has prepared some questions for the group. And you recently facilitated a session on the topic of CASE expressions and why they might be a code smell. That sounds like a really controversial statement. How did you approach that topic? STEPHANIE: It's funny because I was looking at the upcoming chapters to pick a topic to facilitate for this book club, and CASE statements stood out to me because I was like, oh, I know what that is; that will be easy. [laughs] But it turned out to be a bit meatier than I thought it was going to be. I'd say that I didn't really consider them a code smell until I read the chapter of Ruby Science talking about them. So I was a bit surprised because they seem so common, which is probably also why I thought it would be an easy topic. JOËL: Would you say that reading the book or that particular chapter changed your mind? STEPHANIE: I think it did only because I hadn't necessarily given them a second thought or thought of them more deeply in that way. I think that, at least in my experience, you encounter CASE expressions pretty early in your career, and you think they're a cool tool for making your conditionals look a bit nicer. And it takes probably a bit more experience, a little bit more pain using them or trying to extend them that you start to have a bit of a more higher level awareness of what might be problematic about a CASE expression. But the book club that I facilitated, we had a really engaging discussion where most folks agreed that it was a code smell but also said that it depends. JOËL: Classic consultants. STEPHANIE: Truly. One thing that someone said that was a really nice takeaway for me was that CASE expressions get a bad rap in object-oriented languages because there are typically other tools or options you can reach for that might be preferred. And someone else said that it's probably a sign that you might be doing too much in the method. JOËL: Hmm. You mentioned that there are some tools and things that might be preferred over CASE expressions. What are the common alternatives that people say you should use instead of a CASE expression? STEPHANIE: I think one simple solution that we discussed in the book club for more straightforward cases would be a hash lookup to use instead of checking for equality via CASE statement. Another solution we talked about was polymorphism, which I think might refer back to the idea of having a bit of a higher level understanding of abstractions in the codebase and what things might look like in the future, especially when you might not have too many conditionals yet in your CASE expression. Another thing that really stuck out to me in our book club discussion was another thoughtboter mentioned Sandi Metz's 99 Bottles of OOP. And in that initial solution, she presents a CASE statement as the perfectly fine solution for now. And I thought that was really interesting because, in some cases, that might be all we know about the problem, and that is perfectly fine. What do you think about that? JOËL: I love the idea of starting simple. Don't try to start with abstraction, especially if you're doing test-driven development. You have a test, make it go green, use the simplest thing, use duplication, use all the dirty tricks. And then from there, now that you know I have a test that was red and this code makes it go green, now the question isn't how do I solve the problem? It's how do I improve the solution? So we've kind of separated those two steps out, and I really like that. STEPHANIE: Yeah, I remember you mentioned that you had refactored something into using a CASE statement. And I'm curious if you want to share more about that. JOËL: Oh boy, this was a "fun" problem. Fun is in air quotes, by the way. It was a multi-step form, AKA a wizard in a Rails app, where every step submitted to the same controller, and the controller was a huge mess. It had to handle submissions from four or five different forms, some of which shared fields. And it was this huge, deeply nested conditional thing that checked if this field is present in params, that probably means we're on step three, except if this other field is also present, then it probably means we're on step four. But if this Boolean flag in the database is set to false, we might be on a variation of step three. And because there was branching, potentially, it was an absolute mess. By looking at the code, you could never know what step of the processing you were on. What I did is instead of all of these nested if else conditions, I wrote a flat CASE expression that just said, if step one, do step one logic or process step one form. If step two, process step two form and so on. So it was nice and flat. I was able to reuse some parts of the work across by making private methods or other objects, things like that. But you could easily tell in any part of the code what step you were processing. Which means if you get a new feature from the client that says, "Can you modify the behavior on step four?" Now you actually know where to go to. You go to this controller; you find the big CASE expression. You find the branch that says, "If step four," and then you drill down from there. STEPHANIE: So after refactoring that into a flat structure, did you find the code more readable? Did other folks on the project think so too? JOËL: Yes, it was unanimously loved because this is the part of the code that everybody feared to touch. It was the most awful, gnarliest code. And a few of us had touched it, and so if you did the git blame, our names would show up, which meant that anytime anybody got stuck in that code, they would reach out to us and say, "Hey, you're the last one who touched it. Can you fix this for me?" And it was a big game of not it. Cleaning it up made this code accessible to everybody on the team. STEPHANIE: And why do you think a CASE statement was the right solution in this particular case? JOËL: I think if it's a multi-step form that maybe had seven steps in it, you clearly have seven branches that you're working with. And so hiding that behind nested conditions where you try to reuse each other's branches just muddied the waters. We have a seven-way branching path; let's be honest about it upfront and do a seven-way CASE expression. STEPHANIE: One thing that we didn't really talk about as much in our book club discussion was that CASE statements can be quite readable, especially for newer developers. And even though we all did think it was a bit of a code smell, I recently encountered on my client project in a code review someone saying that they preferred a CASE statement in that situation because it was easier for them to grok. I think that's a benefit worth considering before trying to do something fancier in some cases. And I'm curious what you think about that. JOËL: I strongly agree that a CASE expression is a great place to start, especially when you have actually more than two branches. Your logic could go one of n ways. I generally like to branch earlier than later in a lot of code. It's better in my mind to have a seven-way branch at the top of your decision tree and then just straight lines down than this constantly looping back and branching again and looping back, trying to force everything down a single path when it really doesn't want to be. STEPHANIE: So, in this case, did you know that you had those seven branching paths upfront, or did you have to tease that out? JOËL: I did not know from the code. Honestly, it would be very difficult to infer that from the code. But from the product, I knew this is a multi-step form with seven steps. And so I knew what the branches were from the product description. But no, it was almost impossible to infer that from the code. Long-time listeners of The Bike Shed may remember an older episode where Steph and Chris discussed multi-step forms and how best to approach them in Rails and also in JavaScript. And one thing that did come up is that an ideal way to work with a multi-step form in Rails is to have every step be its own controller. So you have a view, it submits to a controller, which renders another view or redirects to another view which submits to another controller. And that is the direction that we went with this multi-step form eventually. Once the single controller had a big CASE expression in it, we slowly started moving each branch out to its own controller. And now we had the step one controller, the step two controller, the step three controller, and so on. And I think that was probably the best solution in the end. But we had to go through the CASE expression just to know what was safe to move out. Interestingly, this refactor is effectively replacing a conditional with polymorphism because all of our controllers are controller objects. They respond to the same interface. And so this gets classic refactor that Ruby Science suggests, which is what we did and kind of what Steph and Chris recommended if you had the luxury of starting from scratch all those episodes ago. STEPHANIE: Nice, I'm glad it turned out that way and was a lot more manageable. JOËL: It's really interesting when you're working with a situation like that where you've got really messy code, and you can make some improvements. And it's like, how far do you go? Especially because there's usually a backlog of new features that the customer wants you to implement. So I'm curious for you, Stephanie, how do you know when you've gone far enough in improving code, either in a refactor step for your own code for a feature you're writing or maybe you're trying to take a break and say I'm going to take a little bit of time today to improve this area of the code. How do you know how good is good enough? STEPHANIE: That's an interesting question. I think I encounter that in a couple of ways, either in my own work when I am tasked with a feature, and I start getting into the code, and it stresses me out and leaves me a bit confused and not sure where to go to work on my feature. That is usually a signal that I might need to pay some attention first and make the change easy and then making the easy change. The other common thing that I have experienced on teams is we collectively feel the pain of an area of the codebase. And maybe we talk about it at a developer meeting, and all agree that, yeah, we really want to give this part of the code some love and add it to the backlog. But it's tough in that case because, like you said, there are a lot of new features that stakeholders want. And we as developers want to be over here taking care of our little codebase [laughs], making sure that it is healthy and it feels good to work with. JOËL: I feel like I don't just want my codebase healthy; I want it pristine. STEPHANIE: Ooh, pristine. What does that mean to you? JOËL: I want it perfect, nice, and shiny. And, of course, it's never that, which is why it's always tempting to toss out the old code and start over and do it right this time. That's not a good thing. You have to be able to live with the messiness of everyday life and the fact that, okay, here's an idea. I think if your codebase is perfect, you've put too much work into it. You've gone too far, and you're beyond that; when is good enough good enough? STEPHANIE: Whoa, that's a big statement. JOËL: [laughs] Feel free to disagree with me here. STEPHANIE: I guess I'm curious what perfect is in this case. JOËL: I think it's subjective for the developers who are writing it. But oftentimes, the ones who are looking for perfection go way too far in their quest for that. STEPHANIE: Way too far at the expense of things like business value or other things? JOËL: I think in two ways; one, you probably ended up overengineering things to try to make it so perfect. Your design needs to have some amount of flex in it for the unknown. It's okay to have some rough corners because it's going to change. And you're going to have to redo that corner next week anyway. So you need to not go all the way in making everything absolutely perfect. The other thing is that if you are putting in the effort to make everything perfect, at some point, you hit diminishing returns. And that's not worth your time from a business perspective or even on a personal project where you're just trying to ship things. At some point, you need to make actual progress. STEPHANIE: I'm curious if you mainly hold yourself to those very high standards or if you also think about that when reviewing other people's code. JOËL: So I mentioned earlier that I want my code to be pristine. I want to be clear, that's a bad thing. I do not actually hold myself to that standard. And I try not to hold other people to that standard, either. It's sort of tempering idealism with pragmatism. So being able to say, look, can we cut scope and focus on just one thing? Or does this fulfill the need that we have? And will it hurt us if we leave it like this and come back to it later? Or that question I asked you at the beginning, is this good enough? And maybe we can come back to it eventually. STEPHANIE: I really struggle with that question sometimes because, in some ways, people talk about software as a craft. And if we were building it in a vacuum, we could fine-tune and hone it until it's this beautiful, perfect, pristine thing. But because we write software for real things in the real world, we are constrained by the needs of our users, or the business, or just the purpose of building software is for folks to use it. And in that case, part of the job is evaluating trade-offs and deciding when is good enough. But sometimes, when I'm by myself working or coding for a little while, I do get sucked into wanting to make this the best that it could be just for my own personal fulfillment and joy. And I have to pull myself out of it sometimes and take a step back and be like, is this good enough for now, good enough for other people to be able to understand, work with in the future? And sometimes, it also requires getting other people's input too. JOËL: That's really valuable. STEPHANIE: Yeah, the worst thing that could happen is squirreling away with your code, and then you emerge with something that was totally not what was asked for. [laughs] JOËL: Especially on a work project. On a personal project, it's often good to know why you're doing a thing. And so maybe you want to see how far you can get away with pushing a particular metric, whether it's you want to go extreme on the decoupling or 100% TDD, or maybe you want to try something like test && commit || revert which is a development methodology. And those are all great as learning experiments, and then you go as deep as you want. I'm going to make another hot take here, and again, feel free to tell me I'm wrong. I'm going to say that on your own personal projects, if you pursue perfection, even when it's not for work, pursuing perfection on personal projects dooms them to join the others on the pile of uncompleted projects on your GitHub. STEPHANIE: That is an interesting take. I think it depends on the goal of your personal project because I personally like to have my projects be a bit of a sandbox, and I have no expectations that they will end up being anything that other people would necessarily look at, even though I guess they just end up public on my GitHub and are just sitting there in a weird, unfinished state. But yeah, I like to use them as an opportunity to, like you said, practice those concepts that I am really excited to explore but might not necessarily have the opportunity to on whatever client project I'm currently working on. And sometimes, I end up just scrapping it, but the exercise itself was valuable for me. I'm curious, though, what types of personal projects you have that lead you to have that opinion. JOËL: I think the way I use personal projects is very similar to you in that they're generally for my own personal growth and entertainment. It's about the journey, not the destination. So I generally have no intention of making this a thing that other people will use. It's typically a way to try out a technique, or a concept, or an idea. And so, for those, going really far on a performance or quality metric can be the goal. And that's completely okay with the knowledge that I probably will not complete or ship this project. I've done a few others where I've done the opposite. I've joined Game Jam events where you typically have a hard deadline. This could be a longer one, like maybe a month or as short as a day or a weekend, and you have to build and ship something within that deadline. And then you have to really make some pragmatic choices. STEPHANIE: Yeah, that sounds like a lot of pressure. I don't know if I would necessarily thrive in that kind of environment. I really like to spend a lot of time thinking about my code and looking over it again, sometimes to the point where I might be a little bit too precious about it. I was reflecting on this recently, and I thought about back when I was earlier in my career and didn't have any idea of what clean or good code was or looked like. And I would just write the code that would make my future work and just put it up for review. And I was very blissfully naive, I think, at that point in my career where I wasn't self-conscious about it in any way. And I think I'm trying to find a good middle ground between being comfortable with whatever comes out when I do some work or write some code while also having more knowledge and experience being able to revisit it and give it a deeper look after some space and feeling good about it without spending too much precious time on it. JOËL: Yeah, it's that classic consulting; it depends. Learn to balance code quality idealism versus the pragmatic reality of your goal, which is I want to ship something, both on your personal project and at work. That perfect code is useless if you can't ship it for contexts where you actually care about shipping. And on that note, let's wrap up. The show notes for this episode can be found at bikeshed.fm. This show is produced and edited by Mandy Moore. If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review in iTunes. It really helps other folks find the show. If you have any feedback, you can reach us at @_bikeshed or reach me at @joelquen on Twitter or at hosts@bikeshed.fm via email. Thank you so much for listening to The Bike Shed, and we'll see you next week. Byeeeeeee!!!!! ANNOUNCER: This podcast was brought to you by thoughtbot. thoughtbot is your expert design and development partner. Let's make your product and team a success.
On today's episode, I'm excited to welcome my good friend and colleague, Stephanie Sotelo, who also happens to be my backup parenting coach. Stephanie blows my mind over and over again as we talk about accessing our “Whys” as parents, and tapping into our values, which act as our compass on this journey and give us the courage to hold firm in our parenting choices when others may question them. We explain how knowing your “Why” can help you understand yourself better as a parent, as well as your partner and even other parents who may have the same “What,” but a different “Why.” We also discuss the ways your “Why” can change over time, and the importance of finding your own authentic voice in a world where so many other opinions are thrown at you. We talk about choosing connection with your child above all else, encouraging your child to advocate for themselves and find their own strong voice, and why authenticity, confidence, and consistency are your most important tools as a parent. If you are constantly looking at how others live their lives, and their “Whats” on social media, it's easy to get overwhelmed and feel like you're losing yourself in parenthood. Today's conversation will help silence all the noise, opinions, and scripts around you, so that you can grab hold of your own inner voice and parent based on the “Whys” that feel true to who you are. Thank you for your listening, and I appreciate your patronage more than I can say. For more information on my potty training and parenting resources, please visit the links below. You can also visit Stephanie Sotelo's website at www.StephanieSotelo.com or on Instagram @consciousparentcoach. The Finer Details of This Episode: Today I speak with my friend and backup parenting coach, Stephanie Sotelo We begin by revisiting my story about taking Pascal to see Green Day, and Stephanie shares her thoughts on my “Why” - the true reason why I made this parenting decision She also explains her “Why” is relation to her 5-year-old son's passion for sports Your values are your compass as to how you're going to parent (for example, with sports, commitment is very important or it may just be about being social) It's a bit more difficult for dads to access those emotions and tap into their “Why” This can make it hard for partners to get on the same page But knowing your “Why” and being strong in your values gives you courage Stephanie values respect and manners for her son, but also wants him to be able to advocate for himself and be able to tell other adults when he feels uncomfortable with something Her story of implementing an allowance for her son and having him earn a special toy by doing chores This allowed him to decide whether he truly wanted the item and it was a game-changer for Stephanie It's not the “What” but the “Why” - Parents have different “Whys” and this is why we judge each other, even when we have the same “What” (for example, two different parents may agree that children need an allowance, but one implements this to help teach money management while another may be trying to teach their child about work ethic) The other parent's ‘Why' is just as good as my ‘Why' Understanding this helps you understand other parents and not judge them, or more importantly, yourself Your ‘Why' can also change as your kids get older Encouraging kids to advocate for themselves versus being disrespectful Parents can also practice finding their own voice, which can help you sort it out from all the other voices that can be overwhelming in the gentle parenting world In tricky situations, remember connection with your child goes a long way (this can be hard when you simply want to get your chores or tasks completed) Doing parallel chores can help you connect while actually getting a few things done Kids really enjoy playing with everyday items like tape or simply running water on the tap We can get hung up on the cost or waste of this, but in reality, it's way cheaper than toys and it teaches valuable life skills If you're constantly looking at other people's lives and not your own, this is where things get lost and you feel like you're on shaky ground As a parenting coach, Stephanie does not want to be another voice that's telling someone to do something that doesn't fit well for them or their family (example of encouraging a mom to go against her instincts to be playful in favor of being more firm) It's important to honor your voice and adjust based on what works for you The “What” is so much based on the “Why” As a parenting coach, we cannot give an exact script that will work every time as it will always depend on your ‘Why' Bedtime issues have been very common throughout the pandemic As a parenting coach, Stephanie cannot get hung up on the “What” because there is always so much more to it - parents whose children are not going to bed at night may not want to simply say goodnight and leave because they've been apart all day Authenticity and confidence are huge - when you have that confidence and courage, kids are more likely to listen to the boundaries Pick your hill to die on, and if you're going to cave, cave early and be authentic to what it is you really want to do You need to align your approach with the “Why” behind it With kids under 5, you can't change your “Why” on a daily basis as they need consistency It's also important to keep your child's age and developmental stage in mind, and shift your expectations for them accordingly We all feel like we want to be perfect, and we all see the “What” out there in the world on social media, but the “Why” is so much more important Finding it can help you feel authentic in who you are after perhaps feeling like you've lost yourself in being a parent Quotes “That values chapter is so important because it's really your compass to how you're going to parent.” “I literally said, I think we unlocked the Rosetta Stone of parenting.” “In general, the families I work with - dads find it a little harder to access all their emotions, they find it a little harder to access those values. And so when I go to do those value exercises, a lot of times with dads it's a bust.” “Your ‘Why' may be good, but it may not be good right now.” “I know my ‘Why.' My ‘Why' is really important to me - it's that I want him to be social.” “Respect is very important. Obviously I teach him manners and everything, but advocating for himself is my biggest ‘Why' because I'm not going to be around him all the time.” “This is why I'm giving him an allowance. I'm going to put $5 in an envelope, and I'm going to tell him, Okay, you've got some money back home. Do you want to use your money, or you can do some chores and earn it? And that was like a game-changer for me.” “It's not the ‘What' but the ‘Why'.” “I hope this is as mind-blowing to you as it was to me... This is it. This is why we f-cking judge other parents, because their ‘Why' is different than our ‘Why'.” “I like that I know I can change that when he is eight. Maybe my ‘Why' does become money management.” “Pascal is - he's spoiled in the sense that I have one kid and disposable income, but he's not entitled. He doesn't - he's never gotten his way. He's never tantrumed for something.” “This really can help you sort out your voice from the other voices. Because one of the problems with modern day parenting is you have too many f-cking voices.” “I started to be like, Oh my God, this is not how you do chores. I'm going to tell him not to. And then I'm like, Wait, nope. I just want to connect with them. I'm not going to jump in, I'm going to watch and see what he does.” “Yes, I wanted a happy, connected moment. And I wanted my dishes done.” “Sometimes we're so focused on this script, or how it needs to be done, or the ‘What.' And we don't look at the ‘Why'.” “You don't want to just take somebody's lens… That's how I think of it is almost like a frame with a lens. And if you are constantly listening to other people's lives and not examining your own, that's where you get lost, and that's where you feel on shaky ground. And that's where things don't work.” “I feel like that as a parent coach, too, I don't want to be another voice that's telling somebody how to do something that doesn't fit well for them.” “The ‘What' is just so much based on the ‘Why,' and once I figured that it was so helpful.” “When you have that confidence and that courage, I think that's when the kids really listen to the boundaries.” “Whatever you do, you have to be consistent with it. And you have to recognize that if you change from that consistency, it f-cks everything up, and then you have to start over.” “What I love about it is that it does make you feel authentic in who you are.” “Figuring out my ‘Why' is really where that's my own inner voice coming in and grabbing on to the ‘Whats' for the reasons that feel authentic to who I am as a mom.” Links: Jamie's Homepage - www.jamieglowacki.com Oh Crap! Potty Training – https://www.amazon.com/Crap-Potty-Training-Everything-Parenting-ebook/dp/B00V3L8YSU Oh Crap! I Have A Toddler - https://www.simonandschuster.com/books/Oh-Crap!-I-Have-a-Toddler/Jamie-Glowacki/Oh-Crap-Parenting/9781982109738 Jamie's Patreon Page: www.patreon.com/join/jamieglowacki? Stephanie Sotelo's Homepage www.stephaniesotelo.com
Everything you put out as a brand should be interesting, it should be relevant to your consumer, and you and your employees should be proud of the final product. So why then are so many brands finding that the people who work so hard on and actually create the marketing materials aren't sharing the end result? Max Summit is a marketing consultant who has worked with some of the biggest brands in the world — Adidas, Lululemon, Athleta, the list goes on — and regardless of the brand, whether they sell online or in brick and mortar, Max knows that true connection with customers start with the connection to the internal employees. On this episode of Up Next in Commerce, Max discusses all the ways that brands should be doing internal pulse checks and reinventing their mission in order to make their marketing materials hit home with consumers. Plus, she explains how brands should be thinking about ways to become resources for customers beyond just being a provider of goods and services, and she gives examples from her days at Lululemon that any company can learn from and where VR and AR can come into play. Enjoy this episode!Main Takeaways:Who's Sharing What?: To gauge the health and success of your company's creative, doing an internal pulse check is necessary. Are employees sharing the work they have produced? Are they proud and willingly talking and posting about the latest project they are working on? Do a post-mortem to gauge how a project went, what aspects were wins and where things could have gone better and allow everyone to share freely and openly how they really feel.Who Knows What?: The boots on the ground at retail stores are often the people with the most knowledge of the consumers and what they want. Brands need to create a more connected communication structure that allows everyone in retail to interact with HQ and the ecommerce team to paint the most holistic view of the customer and then create products and marketing content for them.Who's Engaging with What?: One of the biggest struggles brands face is getting consumers to engage both initially, and long-term. So brands have to hook a consumer quickly, and keep bringing them back with an interesting, exciting, and valuable experience. Virtual and augmented reality experiences are a recent way that brands have been solving this problem, and the creativity and utility that VR and AR offers sets the table for it to be a major way that brands and consumers interact for years to come. For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey everyone, and welcome back to Up Next in Commerce. This is Stephanie postles, CEO at Mission.org and your host. Today on the show we have Max Summit, who is a brand marketing consultant. Max, welcome to the show.Max:Thanks Stephanie, I'm really happy to be here.Stephanie:I'm happy to have you too. So with you, I want to start back in your personal story. Growing up in Brazil, you have a very interesting story around medical issues and growing up in this very creative household, very intriguing household. So, I want to hear just your background before we dive into what you're doing today.Max:Sure. Absolutely. Let's see, the elevator pitch here. So I was born in Boston, but actually raised in Brazil. I am the proud daughter of a ballerina turned designer my mother, and my father was very musically inclined, he had a lot of passions around art and music even though eventually he really poured I think the majority of his time into tech and entrepreneurship. But my upbringing in Brazil I think was anything but traditional.Max:My stepbrother and I, we used to spend our summers down in the beach barefoot on the sand, falling asleep to the stars at night. My granddad would sometimes pick us up after school on a Friday, we would drive down to the beach and we'd spend the weekend on the boat, which was awesome and really lovely. I think as a child, you take in these experiences as they come but when you live as an adult, you oftentimes, I think, look back and reminisce and you think, "How can I also provide that for the next generation or for myself and my own kids?"Max:So yeah, I think it was a very interesting upbringing, very dynamic, I think absolutely it was not traditional by any means. I think that existence and that relationship that I was taught at a young age to be embracive of nature and be embracive of human experiences I think ultimately led me down to this path in brand marketing unknowingly, but that's where I am today is just really embracing, I think, storytelling and identifying the unique patterns and behaviors of organizations that can really communicate something to the world and to the people around them in a way that I think makes sense for today's audience and today's consumer.Stephanie:Yep. Yeah. I love that. I'm just having an entire movie playing out in my head, imagining you on the beaches also now I'm like, "I need to go to Brazil. That's the next step for me?"Max:Yeah, it's funny. I'm definitely painting a more poetic existence, I definitely think my brother and I, we were quite mischievous as well as I think that playful character and that playful nature, I think also lends itself well for a role in marketing. Although sometimes in a leadership position, you can't be as playful as you like to be, but it's definitely I think helped me get to where I am today, for sure.Stephanie:I love that. And tell me a bit about, I know you had a medical scare I think it was around 15 or something. And I was reading a quote where you're saying, "That changed the way I thought about everything," and I wanted to hear a bit about that because I'm sure it's impacted even where you're at today.Max:Yeah. Absolutely, as I said I grew up in Brazil, sports I think is very much a part of the culture and the DNA there. I did everything from soccer, to swimming, to [inaudible], and eventually I think I really found my place in volleyball. That was really the sport where I felt most comfortable. Again, I had great mentors and great coaches who identified long-term potential and I think saw an ability for me to do it even professionally at some point in my life and my family and I really invested a lot of time and energy going to games, getting the proper coaching, the proper training. And I was in a final match, a pre-qualifier for you to be on the national team.Max:And I came down from a jump serve and I remember hearing this massive, shattering pop that went from my ankle all the way down to my hip. And essentially I ripped six ligaments on my leg, my achilles, my hip tendon, my ACL and my MCL, you name it and eventually it was just one go. And it was in that recovery phase where in post-op I went through surgery and I was recovering, and we're flying back from Brazil where my leg really began to swell and the pain intensified over the course of the plane ride.Max:And when we landed back in Boston, it had really gotten to a place where it felt extremely uncomfortable and my mother and I, of course back then there wasn't a lot of research and knowledge around clotting and how that happens postoperatively and how flying can sometimes intensify that. So, I think we were really uneducated around some of those medical complications that you can face, so we shrugged it off as it was a 13 hour plane ride, your leg is probably swollen from the compression or decompression.Max:We didn't really think much of it and we went to bed, and I woke up in the middle of the night really screaming, had really intensified pain, not really understanding what was happening. And I remember my mother was really rushing up upstairs because I was calling for her, I was yelling like, "Mom, mom, mom, something's wrong." And when we pulled the sheets over, my leg was gangrene. It was blue, black, every color that you can imagine I think all the capillaries were just exploding subcutaneously.Max:And one of the last things that I remember was actually my mother grabbing me by my shoulders to try to calm me down. And this feeling of almost, I would say I think I'll use this on the interview as well, like a champagne cork when it explodes, it just happens in an instance. And when that sensation happened, everything just melted away and what we found out weeks later when I woke up in the hospital, was that the expansion of the leg was really what's known as a DVT, a deep vein thrombosis.Max:And the clotting had literally originated from my ankle and had gone all the way to my knee and a piece of it dislodged and went into my lung. And when that happens, your body's deprived of oxygen and it shuts down, and I experienced all of this at age 15, which I think for a normal 15 year olds everyone is planning prom, everyone's playing around their first boyfriend. If they're lucky, maybe they're celebrating their one year anniversary with their high school sweetheart. And for me, I spent the majority of my 15 years in a hospital bed at Mass General in Boston.Max:I think the realization of life and how fragile it is and how limited our time is, and it can be on this planet, I think was reintroduced to me at an age where most teenagers aren't thinking of that. And I think it's allowed me to move through the world a little bit more intentionally, and in a way I think I've been seeking a greater sense of purpose since so that if I were to find myself in another hospital bed hopefully I won't have as many regrets or as desires as I thought I had at age 15.Stephanie:Wow. Wow. I have goosebumps with your story right now. I feel like we could just make that the entire episode, talking about how to live an intentional life. Oh my gosh, that's wild. Yeah.Max:Definitely. I think if anything too, COVID has in a way, I think shed light for a lot of individuals. I think a lot of families, a lot of my close friends and even professional mentors, I think everyone has used this as an opportunity to self-assess and to reevaluate and really measure the scales of lifeStephanie:That's amazing story. So, I want to dive into the brand aspect of things. You said an interesting quote early on before the interview, that you stumbled into it, you did not plan to get into this world, but when you look at your roster of brands that you've served, it's wild. So, first talk about how you got into this world and also some logos just to show people you know obviously what you're doing.Max:Sure. I'm definitely lucky, I'm going to say I think luck is a big aspect of it. But yeah, essentially I studied philosophy and English in college which is so bizarre to think that someone who studied those two fields would eventually end up in marketing. But I think the way everything cascaded and fell into play was really at the root of it was just having fantastic leaders and mentors who identified my potential, who I think understood the reward that comes with molding someone and bringing them into the process and giving them the right opportunities that I think really shed light on their personal aspects, but also their professional aspirations.Max:And the way I fell into this industry was, so actually I started in non-profit worlds, really volunteering, taking gigs as they came mostly in the creative parts. I did a lot of pre-production post-production work then I eventually went into graphic design, I did a graphic design residency for about two years and then eventually got pulled into copywriting then from copywriting I did video. So, doing the gamut of all the art functions and I realized in that process it actually sucked at all of them. I was like, I was good enough to have a general understanding at introductory level, but I very quickly on realized that I was never going to be the director of copywriting or the director of photography-Stephanie:Which is a beautiful thing, because it answers a lot of questions for you. I've had many of those experiences where I'm like, "Well thank you life for showing me that's just not my thing and I can move on now know."Max:Yeah, and also it takes a lot of vaping gut too, to tell yourself, "I suck at something."Stephanie:I'm going to own it, I suck.Max:And I need to find something else that I enjoy, but I knew that I wanted to be in a creative function. But I think ultimately what was missing, I think from all those experiences was the afterthought. So, the strategic side of it and I got my foot in the door actually as a freelance graphic designer working at Adidas. And the way that happened was really through networking. So, when I said that I was really hustling and trying to get gigs on the side, that's literally what I was doing, I was identifying meet and greets that's right. I used meet and greets, which back then was meetups.com at work in my local community.Max:I would raise my hand, any volunteer opportunities for races or local community events. At the time I was living in Boston, and Adidas was a big sponsor for the Boston Marathon. And again, I raised my hand and said can I do any graphic design work? Do you guys need help as a volunteer, it was just saying yes until someone and something was willing and ready to bring me on board. And I started as a volunteer graphic designer and from there that role quickly became a little bit more robust in nature. So, one project led to another, it went from being freelance graphic design to, would you like to support us at a photo shoot? Would you like to do some post production work for us, some casting?Max:And things just fell into place, and it took a very wonderful mentor and a very lovely boss like I said, to really identify that potential in me and tapped me on the virtual shoulder and said, "Hey, I think your place is actually in brand, it's not in creative," which like I shared with you guys I knew that already, I sucked at all four fields. But I hadn't yet gotten that golden offer, that golden ticket to come in full time and he offered me a job. He said we're starting a new division at Reebok.Max:At the time he was moving over from the Adidas side onto the BU classic side I'll be overseeing the division there and we need a brand manager would you like to take a chance on life and take a chance on this opportunity? And needless to say, I said, yes. And things really cascaded and fell into place after that. And just to throw some logos out there like you asked from Reebok, I went to lululemon, from lululemon I then joined a much smaller, but reputable brand in Canada called Lolë. And then from Canada, most recently I was the director of marketing over at LA Athleta, which is a [inaudible] company.Stephanie:Wow. Yup, yup. Awesome logos of course, which is why I was like, "You have to name drop them." That's a really fun story about getting that invite and having someone bet on you before you even knew if you could enter into that world. I want to talk about brand in general and defining a strong brand, because you've worked at some amazing companies now who have done just that and they've been able to develop this following and stay true to brand. And you just see the cohesiveness when you look at what they're doing everywhere, you get it instantly. So, what do you think defines a strong brand today? How do you go about building that?Max:It's a great question and it's definitely evolved. I think when I first started my career in this journey working in performance sports, endurance sports, I think it was very much benefit led marketing. So, it was really about the best shoes takes you on the longest run. Sometimes you got the occasional, this is the shoe that was designed by Michael Jordan. There's a little bit of that celebrity persona aspect of it, but when I really began this journey, it was very product marketing. It was very benefits led, it was a very simplified message.Max:I think there were very little brands that understood and promoted, I think mission driven content and purpose led communication. Nike, I think was one of the first in the industry to package that up and present it in a way that was digestible to the consumer. I think where we're at now today is most brands if not all, I think need to have a purpose led message or at least a mission driven DNA aspect of their brand. I think consumers are demanding more out of brands, I think that now more than ever they're equipped with knowledge and the tools to actually do the research.Max:Which I think before, oftentimes again, the brands really held that power. They could really decide if and when to release messages around sustainability, messages around diversity, equity inclusion everything was very much calculated I think 10, 15 years ago in marketing. Now, if consumers can't find that information on day one on your website or through your social channels, they'll walk away and they'll go to another brand whose mission and purpose is more overtly available on site as well as in their social channels.Stephanie:So, when you're approaching brands that maybe don't already have this, how do you go about it in a way that keeps it authentic? Because, throughout all the things that have been happening in the past year or two, maybe you see brands quickly trying to lean into something and be like, "Oh, we're in that space too, we're doing that well." And then a lot of them end up one week later, two weeks later or whatever it is it's gone and that can actually do more harm probably than not having anything at all. So, how do you approach that, because it feels like a tricky space to play in?Max:It is. And I think it's definitely a hard question that you have to ask yourself and your organization, what are you as a company uniquely qualified to give to the world? Because, I think it is that unique nature that me as a brand marketer can package up and I can create a strategy behind and a communications and really elevate that and present that to the rest of the world. I think the brands that are struggling like you mentioned some were having to pull back.Max:Other brands that aren't having those honest conversations with themselves, I think their desire to want to jump on something that is currently mainstream but not necessarily an element that trickles down back to their DNA and their structure and their organization. It doesn't take long before it's a domino effect. It doesn't take long before you see all of the pieces falling at the same place. But I think really identifying what you as a company are most uniquely qualified to deliver to the world and to your customer, I think that is the hardest, if not the most important conversation that you can have and you can also give to your marketer.Stephanie:Yep. Yep. How do you go about measuring how a brand is doing? So, I'm thinking about what consumers say versus how they really feel, a good quote, maybe not a quote, but a summary from the CMO of UPS, they came on another show of ours and they said that they had really good brand recognition, people trusted them, but a lot of their consumers saw them as an old and stodgy company so they had to rethink their marketing because of that. But I'm like, if you would've just heard the first piece of oh, we have a great brand, recognition and trust, I'm just going to stop there, I'm good. Versus, getting into the details of, and it's a yes and they also think this, how do you go about measuring a brand's performance or how the consumers actually view them?Max:I love that quote too, taking a soundbite and turning it into an actionable insight. I will probably say something's that's a little bit more controversial, but that's in my nature.Stephanie:Yeah, I love that.Max:I love internal employee pulse checks. I think for me, the true measure of whether your work is adding any value or is exciting people is whether or not your employees are naturally promoting that work. Very often it does not happen, you would be shocked how many times even sitting in a marketing function living it day in, day out going through the blood, sweat and tears will team members refrain from posting. I think it's just there's very little work that I think is being put out into the world today where employees take pride on wanting to showcase it and really wanting to advocate for it.Max:So, my way of measuring success is if you can take a head count around the table, and if every member from your team posted, shared it, communicated, was proud to wear it as an emblem, I think you've succeeded in your role first and foremost, if you're just relying on that customer, if you're just relying on that external feedback again, I think you failed as an organization and as a mentor and as a leader internally.Stephanie:Yep. Yeah. I love that. That's really good. I'm thinking about different types of companies that probably definitely have an easier time. I'm thinking the non-profit world, people go there, maybe not always getting paid the highest, but they are there for a mission versus maybe other companies where people are there for the money or it's a trend. How do you think about actually getting that feedback? Are you literally going around the room being like, "Did you share, did you share?" Or how do you do it at scale if it's a team of thousands?Max:It's so great, I love internal surveys. I think anytime I always loved doing postmortems after a campaign or after we deliver an action, because sometimes it doesn't have to be a piece of creative content. It could be a public commitment, that you as an organization decided to make and that structurally made sense. And I've actually found that oftentimes employees are more willing and ready to share public commitments than they are with pieces of content, but anyway to answer your question, I'm a really big advocate of doing postmortems and in those postmortems, I think an internal employee pulse check with a survey I think is most often the best way to conduct that type of review process.Max:I also found that allowing employees to share feedback anonymously, I think helps exponentially and I think people are always more hesitant to put their name behind the feedback, but I realized very quickly in my review process that the moment I allowed people the freedom to actually say what they really thought without having to put their name behind it, I think the amount of feedback that we got was just astronomically higher, I think by nature.Max:I also really love when we are speaking about obtaining external feedback, I think social media has done a great job with that. Depending on which channels your organization is most active in, for me Athletic Apparel socials the epicenter right now, over all the community activities happening. I love doing pulses and customer surveys on Instagram. I think it's such a great way for you to get feedback in real time, which can also be very eye-opening right. Max:So, when you capture your audience's attention, you have a brief second to really engage with them. And if they've already made that first move, I think that to me is a lot more telling for a brand and organization than if you were to conduct customer insights and this extensive six month interview process where you're most likely bringing in individuals that aren't actively engaging with your brand. But on that aspect, I will tip my hat to Instagram I think for introducing that feature a thousand times over again, I've actually used it numerous times, not only for feedback on creative and campaigns that we've brought to market, but also as a way to guide our strategy.Max:So, I love doing polls where we basically ask our community what content would you to see us produce more? And sometimes the answer doesn't have to be very philosophical, it can be very direct, it can be very simple. And the responses that you get can actually dictate the course of almost an entire season. And I definitely have done that before.Stephanie:Yep. So, are you doing that for some of the brands like Athleta, and how did you structure the polls to get actionable feedback?Max:Yes. I think Athleta is a great example, especially during COVID right. It's hard to think back where I was a year and a half ago, but I remember having just moved to San Francisco for the job. I think I was in the office for a total of seven and a half days. The city just shut down and no one knew what to do. The organization didn't know what to do. I think as employees, I think everyone was in a standstill, but again, the community and our audience demanded responses, they demanded actions. And I think our social media team, I think definitely held the grunt of that work, they're at the battlefields, every single day whether it's delivering good news or tapering and bad news.Max:And so, I think there was a lot of immediate and actions that we took and we really utilize social, I think, to dictate the course of how we would, I don't want to use the word market, but really communicate where we were as an organization, because everything was at a standstill for 30 days. And it was really through that engagement and those backend DMs, those poll surveys, and I think we really found power in the voice of our community and we also understood what it really meant as a brand to show up for your community.Max:So, one of the things that quickly became evident as the city started shutting down was that the majority of our members at Athleta were business owners, female owned businesses, which some of that meant that they own their own studios, yoga studios, gyms studios, and those were the first to be impacted by COVID. And so, how do you as a brand support that community in a way that isn't related to product and I think for Athleta, being under the umbrella of Gap Inc we decided to really create a financial resource for a lot of these female owned businesses, where as a member of the Athleta community, you could apply for a grant or a funding that could really for some moms and for some women could really help keep their business afloat for the foreseeable future, which is where we were at the beginning of COVID.Stephanie:I love that. And did you find out more about who needed that help or what help they needed through social media, like you said, through those DMs?Max:I would say a combination of social media and our retail teams. I think especially working in the Apparel industry, we forget that retail is not dead. And if you have a retail structure that is highly connected to your community, they oftentimes know more about your consumer than you do sitting at HQ. And it's really that share-ability from the boots on the ground, I hate using the word bottom up, but I think that's really the mindset.Max:So, let's [inaudible] this top-down mentality and really about what are you hearing? What are customers saying when they're coming to your door? What's the feedback that you're receiving in store? I think that's really pivotal and I think that was really the feedback that was necessary for us to translate that into actionable insights as I call it.Stephanie:It seems there's still going to be so much work around getting those insights and incentivizing the employees to share that, but now consumers are basically coming to any retail shop expecting the same thing that they can get from online. It's like, yeah, of course I should be able to have this. Of course, I should be able to see inventory, talk to you quickly get what I want, but I see there's that catch up to even just going in different stores around Austin right now and being like, "Oh, this still feels like 2019 right now. What are we doing here?" How do you see that evolving?Max:It's also fascinating too, because you bring that up. Your store experience in Austin will probably be much different than a store experience in San Francisco. And even under the context of COVID, I think that's going to feel a lot more amplified as well in today's industry. I think what that touches on is really what I love to refer to as a decentralized model, where I think what we're witnessing in marketing and in omni-channel experiences and retail experiences is these little pockets, these little hubs of community oriented messaging and team structures.Max:So, a retail store is no longer just a retail store, it's actually a space for you to welcome members of your community, I think it's a space for you to engage with local businesses. That was actually an aspect that I love the most about working at lululemon was just how they really understood, I think the power of community and how a retail store could actually be an extension of that local market or that local demographic. And it didn't have to just be a place for business transactions, it didn't have to be a place just for you to go in and buy stretchy yoga pants as everyone likes to say.Max:For some, it could be a resource. I took a trip down to Key West Florida, of course this was before the pandemic happened. And I wanted to know what yoga studio to go to, what coffee shop I should go to, and the first place I went was to a lululemon store and ask their community members, 'Where do you go to work out? Where do you go to get coffee?" And it's just amazing how I think retail environments have become a source of information for a lot of members of the community. And I think the brands that are adapting to that mindset, I think are the ones that will really in the end come out winning and will be stronger I think in today's industry.Stephanie:I love that, such a good example. How does a company do that though? How does the brand pull a piece of the playbook from lululemon and create that community, do it in a way that people actually want to engage with, they trust it where they'll go and ask advice like where's the best coffee shop and buy from it. You essentially nailed every aspect of what every brand probably wants, but what do they do differently to get all of that?Max:I think it comes down to the original question that you asked me, I think a few minutes ago, which is, I think it's just having that honest conversation as an organization as to what are you most uniquely qualified to give to your audience? And I think for lululemon, again, I'm probably not in a place to speak about this because I wasn't there in its inception, but I can only imagine that when the founder sat down and analyzed that exact question, I think they knew that the power rested in community, so they made a conscious choice to really embed that in the organization's structure, as well as their brand DNA.Max:And I think from that brand values the mission statements evolved and it serves as a filter, as you grow and expand, I think for a brand that maybe is not rooted in community and is wanting to maybe shift into that world, I will continuously say that, I think you need to ask yourself are you in a place that you can authentically play in that ecosphere, because if you can't be authentic then I really don't think you should invest the time. I think you should really, really embrace what makes you unique and what it is that you can deliver to a customer in a unique way.Stephanie:Yep. Yep. I love that. So, earlier you were talking about Instagram is where it's at, it's got all these amazing features that can help a brand learn about their audience, answer all the questions they need. What else are you betting on? What other platforms are you bullish on right now?Max:VR, virtual experiences augmented reality. I am so excited for that future. I think if anything, COVID and remote living and brands having to force themselves, how else can we engage with brands that is interested in ecommerce platform and think have really forced us to reconsider other ways to bring customers along the journey and the creative experience. And I think augmented reality has certainly put us in a place I think of a lot of excitement.Max:My favorite to date has really been the Billie Eilish and the Moment Factory partnership, they created an out of this world, no pun intended experience where they really transported her audience and her fan base into this imaginary world. And the question was really what happens to you when you fall asleep? So, it was really this dream like state and it was just, I think, a beautiful representation of what the future of content can look and feel like. And at the same time, I think it really challenges this archaic notion that digital experiences don't create meaningful connection.Max:Which I actually think having VR and having augmented reality has really challenged that way of thinking, because it can absolutely transport you into a different world. It can absolutely create an emotion and it can also create an action. And I think that universe excites me tremendously, and if I could shift my focus and my attention, I think it would really be in a place where I'm playing day in and day out with that type of environment, for sure.Stephanie:Oh, I love that. This is something I've been looking into more from the crypto side and the cities, same, same though. I was learning all about these digital land sales and getting in there early, they're building this entire world and people go and interact there and do essentially commerce in this world, but to think about it from a brand perspective, how can a brand play in VR because Billie Eilish, I get it concert go somewhere to a different land, I love the idea, but if I'm a brand, what opportunities do you see right now?Max:Well, I always think back to yoga of course, because I worked for one of the best yoga brands in the world, but I think again, not wanting to go back to COVID, but I think COVID really shed light on our inability to go outside, and again, be in studio and being in environments that felt very natural to us. And again, I'm speaking in these terms assuming that you're probably the athletic person who does yoga, but if it's not yoga, it could be you wanting to go to a restaurant or a concert or whatever it is.Max:But in the context of yoga I think there were a lot of studios that were actually introducing this notion of virtual reality in which that even though you couldn't physically be present in the yoga studio, you could absolutely be transported there. And I think, again, it was a way to just create that connection and create that meaning and really bring people into one digital world that really felt physical visually.Max:And I think the brands that understand and harness that power, I think they'll start using that as a mechanism potentially to either create content. So, one way that I could think this coming to life, and actually it was one of the first big projects that I worked on at Reebok. At the time Google and YouTube had just started partnering on VR experiences and we did an entire documentary campaign experience, where we brought audiences basically along the ride for four emerging athletes.Max:And it was really a way again, for you to be transported into the physical spaces in which they train day in and day out. And I think for a customer to have that behind the scenes look, it's really one of a kind. If you can imagine this in an era of a Michael Jordan, to have that unfiltered access to an athlete before or after, or even during experience, I think that's a great place to be in, in terms of VR experiences and building that digital world and that digital infrastructure for at least athletic brands, which is where I operate in.Stephanie:Yeah. I can imagine so many different experiences to leverage [inaudible] not just from shopping, that's just the after effect of bringing in customers from all over the world and at the same place, instant way to build community, meet people. I think that's what COVID taught everyone, is we were in our own little bubbles and we'd gotten to this place where the only time you maybe saw people who didn't live near you, was in work meetings. And then all of a sudden you're like, "Oh, but now I need more community."Stephanie:And now it's actually my work friends I need. And so, starting to broaden that, going into a whole different world and being able to have an experience together, you vet your community and then you can also shop while you're there and maybe even change the experience as well, where it's, try that on for me. Oh, I'd like to see a model showing me this outfit who looks like me, this entire thing of shaping where you're at and be able to control it too.Max:I love that. And I think Warby Parker did that.Stephanie:Oh, did they?Max:Yeah. I think before any other brand caught onto that, the idea of essentially creating a virtual experience in which you could try on the products. And I think that notion that you, and I think you actually said something that gave me goosebumps, that idea that you could in real time see the product on someone that looked and felt like you, I think that's really important as well. And I think that's a shift that we're seeing more and more. And I think if anything, I would give credit to VR for building that and putting that at the forefront of conversations and marketing, for sure.Stephanie:Yep. Yeah. We're going to be looking back and be like, why did we just look at, oh, this model is 5'4 and 100 pounds. And me being like, okay, so that's not me. So if I was much taller and bigger, how would it look on me? How would it flow? We're going to look back and be like, "Why did we ever buy things based off of one picture? I want to see how it moves and fits and looks on someone." And I should be able to choose that experience if I'm not going in the store and trying it on every time there should be no return rates from our products.Max:I love it, do you want to work in marketing?Stephanie:Let's do it, I'm down. So many ideas I realized on the show, I'll just give everyone ideas and maybe someone will implement one of them. Every one of a thousand is an okay idea of mine. Super fun. Yeah. I love thinking about that stuff. All right. The last thing I want to touch on was what brands are you watching to keep an eye on the industry? Who's doing a really good job when it comes to branding where you're like, "I keep tabs on them every week to see what they're doing?" Maybe someone you've worked for.Max:Oh my God, that's such a hard question. It's interesting, I think I'm going to go outside of my respected industry. I'm really fascinated by what Spotify and Netflix have done, I think to the industry. I think Netflix has really capitalized on an audience-based as well as on a perpetual habit that I think we as consumers are starting to have more and more of in this digital age, and they've just managed to build this empire that I am so in admiration of, I also love what they're doing as a platform in terms of exposing younger audiences to different types of content with documentaries being at the forefront, I am a huge advocate of documentary.Max:In fact, one of my first experiences was working in post-production for documentaries. And I think I give them so much credit for just having that vision, having that ambition. When I think back from where they were 12 years ago or [inaudible] first heard their name and where they are today being nominated for Oscars and just the amount of insights and data that they have on us as an audience and as a viewership and how they translate that data into building out specific content programs and building out specific platforms on their channel, everyone else is chasing them and I think that was a gift.Max:To me, they're the Kleenex of the, they're probably going to hate hearing that, but they've defined online streaming. The idea and the notion of online streaming did not exist before Netflix came into the picture, and all brands now are chasing them and they want to compete. And I think that's a brand that I go to, I think, as a source of inspiration, which is weird to say, maybe it wasn't what you were hoping to hear.Stephanie:Oh, actually, when you said that I'm like, oh, obviously you're watching Formula 1. You're seeing the brand and the content angle and then you can go to the whole platform play, which also equally is inspiring. We've written entire stories of mission around Netflix and how they basically killed off their entire revenue stream to bet on another big one and inspiring all around. So, I love-Max:I agree. It's thinking big, bold and audacious and just watching the ripple effect happen. And I think they're definitely a brand that I go to inspiration. And another one is Spotify, again, I think the brands that excite me are the brands that understand their customers and they're catering their business decisions based on that understanding. There's no better brand that exposes and showcases that as Spotify, even the types of content and the marketing campaigns that they're putting out there all originally from their customer insights comes from data. And you got to give credit, I think, to a tech company like Spotify, where they're consistently operating in this multi dynamic world.Max:Because, if you can only imagine between licensing music rights and managing talent and branching into podcasts as well as music, it's got to be a living nightmare. Every time they have the opportunity to put a piece of campaign out there, a piece of content it's so powerful and you can see it from a share-ability aspect, from an engagement aspect, people are excited, people are waiting for it. Again, it's so simple their marketing but it's so effective and it's done in such an authentic way. Again, it comes back to that topic that you and I were talking about. It's authentic in nature to who they are as a brand, as well as a business. And I really admire them for that.Stephanie:Yep. Yeah. I love it. Anyone who wants to hear more about Spotify, we had their old CMO on, he's not their CMO now, but Seth, it's a good marketing trends, the podcasts it was really good. I think we did two parts with him and he was epic and you're like, now I know why the company is where it's at now and all of the decisions that were made to get them where they are now. Cool. All right. Well, let's move over to the lightning round. Lightning round is brought to you by Salesforce Commerce Cloud, this is where I ask a question and you have a minute or less to answer. Are you ready?Max:Yeah, I'm prepared.Stephanie:Okay. Get amped up. First one. What's up next on your reading list or your podcast queue?Max:Oh, great. Where the Crawdads Sing.Stephanie:Where the crawd... I have not actually heard of this one, I'll have to look at that.Max:I have it right there on my shelf. Yes, I bought it two years ago, It's collected dust, but I've made a commitment to finish it before the end of August. So, that is on my reading list for sure.Stephanie:Wow. Good reads a million votes, 4.8 stars. That's very good one. Cool. All right. If you were to have a podcast or show, TV show, movie, whatever you want it to be, what would it be about, and who would your first episode or guest be?Max:I think I'd have to do a podcast that is centered around people, places and products and how each of those define the course of your existence and how they really shape who you are as a human. And I feel anyone could speak or relate to any one of those elements and [inaudible].Stephanie:I like that. Who should be the sponsor for that? You already probably have a couple in mind.Max:I don't know, I've actually never been asked as a question. I don't know, maybe something will originate here.Stephanie:Yeah. There you go. Here comes the show, anyone who wants to sponsor it, Max is ready for you. What is the biggest disruption coming to ecommerce over the next year?Max:Hands down, virtual experiences.Stephanie:Love it. We already know your love for VR, so that makes sense. Next one, what is the nicest thing anyone's ever done for you?Max:I've had a lot. I was working at Reebok, I had a really tough day, it was the first time I cried in a bathroom. You know when you just want to hide your tears, you go to-Stephanie:I've been there, corporate life.Max:And I stumbled across someone who worked across from me and she asked me what was wrong. And I said, "Nothing everything will be okay," as we usually do. And the next day when I showed up, she bought me daisies, which she knew were my favorite. And she had a little bouquet of daisies there, and with a little note, and I had only interacted with this person once. And I thought it was just such a genuine kind gesture, and I've carried that moment since.Stephanie:I love that. That shows how such little things can literally impact someone's entire life. And this person listening, I hope they're out there so they can realize well-Max:[inaudible] bad-ass now, so you snagged a good one.Stephanie:I love that. That was great. All right, Maxwell, thank you so much for coming on the show, sharing all your brand knowledge, where can people find out more about you and maybe even hire you?Max:So, they could visit me at maxsummit.com. Yes, that's right. I've basically bought out everything that has my name on it.Stephanie:That's a good brand.Max:It was my little own brand marketing.Stephanie:Love it.Max:Yes, and my website you can visit at maxsummit.com. I'm also on LinkedIn again, Max Summit you can always find me. If you Google Max Summit, I'm probably Max Summit, Instagram, Max Summit LinkedIn, Max Summit Twitter, Max Summit at Yahoo, Max Summit at Gmail.Stephanie:There you go, Myspace, all the things.Max:Yeah. I'm Max Summit everything, but I love connecting with people, I love building stories. Even for virtual connects or coffee, it doesn't have to be business related, I'm open and I'm here.Stephanie:I love it. Thanks so much.Max:Thank you.
What's hot today might be out of the zeitgeist tomorrow. Are people still doing goat yoga? Are skinny jeans really the new mom jeans? There are so many trends to keep track of and so many “next big things,” it's impossible to know what's real and what's just a passing fad. For a business, it's important to understand the distinction, and it's even more important to have products that will thrive regardless of the different cycles your industry will run through. Lopa van der Mersch says she has that kind of product with her company, Rasa, which makes a coffee alternative with adaptogen blends. Lopa has a fascinating story, including inadvertently entering into a cult, navigating tricky co-founder relationships, and building up a business to more than $2M in revenue all from her garage.On this episode of Up Next in Commerce, Lopa explains why she believes that her product will be a game-changer regardless of societal trends, and she breaks down how to spot something phony or bad for you, whether it's in a product or even in a partner or personal relationship. Enjoy this episode! Main Takeaways:Finding the Right Match: When partnering with a co-founder, especially one who is a close friend, some things you should consider are their skills and their ability to resolve conflicts. Ask yourself would you hire this person to do this job if they were not your friend? And think back to how you have handled conflicts with each other in the past. If you are comfortable with the answers to those questions, you can feel more confident in that person as a partner.Culture Shock: Growth in any industry is related to what is happening in common culture. When something is trending, a corresponding industry will rise. Today's society is focused on health and wellness more than in the past, so companies that deal with products in that space are on the rise. But to stay solvent even when the trends change, companies need to ensure that they have products that are worth something and add to a person's life regardless of whether it's trendy or not.Let It Come, But Also Go After It: Striking the right balance between organic growth and focusing energy and money into specific channels is difficult. The key is to make sure that you are diversifying your efforts wherever you choose to try to gain attention. Play with the levers of what's working in one area, but continue to invest elsewhere so that when one thing begins to fail, you have other options. For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Stephanie:Hey everyone. And welcome back to Up Next In Commerce. This is your host, Stephanie Postles, CEO at Mission.org. Today on the show, we have Lopa van der Mersch who currently serves as the founder and CEO of Rasa. Lopa, welcome.Lopa:Hi, great to be here. Thanks for having me.Stephanie:I am very excited to have you on. So your history as we talked about before the show started is very intriguing and I think our guests would love to kind of start there and hear a bit about your background, childhood, all of the things about Lopa.Lopa:All right. Well, let's see how long we have. So it's all a question of where do I start, right? I mean where do we plug in? But I will say I think a good place to plug is around when I was 16, I first heard the word enlightenment, I don't even remember in what context and I was like, that. I want that, whatever that is. And I started reading spiritual books on Taoism and Buddhism and I went from being this incredibly miserable teenager, like the most, like special. I know like everybody's miserable as a teenager, but I was extra. I'm extra about everything. And then I kind of went through this awakening process as I discovered this other dimension to life and I was just hungry and I was positive and I saw beauty everywhere and it was great.Lopa:I started getting into yoga and I kept on finding myself wanting a deeper and deeper relationship with a teacher. And then I did find a guru, like a real guru from a lineage in India and studied with him for a long time and learned a tremendous amount. Spirituality was a huge focus of my life. I've probably done six months of retreats over the years. And for a while three to four hours of meditation practice a day and I was hardcore. And at some point in there, I started to sort of question the navel gazing nature of it all and was like, what else can I give to the world? And what else can I bring to the world? And through serendipity in many ways, I found a job in the bio char industry.Lopa:And for those who aren't familiar, bio char is short for biological charcoal. It's charcoal that you add to soil to both sequester carbon and improve soil quality. And I helped co-found two businesses there. I worked for Richard Branson's Carbon War Room while I was there. I spoke at TEDx. It was like I was in the right place at the right time in an industry that was really growing specifically for its focus on being a potential solution for climate change. And then after, I don't know, five years of eating, breathing, sleeping, sweating bio char, and then practicing and doing retreats when I could and all of that, I left that context and went on and around the world trip with my now husband and just at the very end of that trip, we inadvertently as always happens, got into a cult. And no one knows you're getting into a cult when you're getting into a cult. Nobody's like-Stephanie:Okay, how do I even know if I'm not in one right now then?Lopa:It's a great question. So there's sort of two distinctions of cults. We are all in a certain cult in terms of modern society, in terms of our involvement with media and the way that it shapes the way that we think. All of that could be considered a cult. And depending on how you look or who you talk to, that could be seen as a benign cult or a destructive cult. Many religions are benign cults. But in this context we were in what could be considered a destructive cult or another framing that they use in cult academia is high demand group. And so one of the ways that you can assess if am I in a cult kind of situation, how much demand is there for your time, for your attention, for your devotion, for your money? And in this context, we were pretty much 100% of our time was focused on this cult. My husband was working at the time and found it incredibly hard to maintain his job and all of his duties in the cult context.Stephanie:How did you inadvertently get into it? Did you meet one person and they're like there's this cool thing, it kind of sounds like this, and it's just like a community of just like besties. And then you get in there and it just turns into more and more and more work, or what does that look like?Lopa:Yeah. Yeah, it's always gradations. So we met somebody and she was talking about her experiences with this woman. And often people don't think of women as having that, but it usually there's some kind of narcissistic component to any cult dynamic. Not necessarily though. And I will also say too, just because I think it's important to understand, you can be in a cult of two and another way to look at that is an abusive relationship. So that would be considered like the smallest size of a cult and then bigger ones are what we normally think of when we think of cults. So if you're in a relationship and you're like am I in a cult of two, look at how much demand is on your time and how much are they trying to limit the world around you?Lopa:So yeah, we met this woman, she was telling me about her experiences and they were amazing and mystical and psychedelic in many ways. And I was like, all right, this sounds like what I want. Yeah. I want that magic. I want that other worldliness. And so we went to go see her and she's a very powerful, very charismatic woman and there's real great spiritual teachings in there too. Nobody joins a cult just because they're like, oh, I want to get abused. That sounds great. There's something that draws them in. And usually it's a trauma bond that keeps people in because there's like, oh, today it's a little bit of love and tomorrow I'm going to humiliate you and today, you're the best thing ever. And tomorrow I'm going to question every aspect of your sense of self.Lopa:So it started as this charismatic, interesting, powerful woman who had a lot of energy. I did have psychedelic experiences around her. Cool. That's fun. Without any drugs and it's the context there. And there are some things that I probably should have been like um, she gravels and hisses and speaks in tongues and stuff.Stephanie:A little off putting.Lopa:Yeah, yeah. But I was like, well, everybody around her kind of did it. And so that normalized it and was like, oh, well maybe I just don't get it. And maybe okay, if I start doing that, then I'll be more spiritual too. And all that kind of stuff. And with almost any cult or context, it gets more and more insane literally. It's like an onion. The outer layers and people who just come to a class here and there, they might be like, she's amazing. What are you even talking about? This is not a cult.Lopa:And then as you get deeper and deeper in and closer into that kind of inner circle, that's where things like some of her like... Sorry, I'll go back and say for the first six months or so, it was like bliss. It was amazing. It was just awesome. And I felt so seen and so loved and all of that. And then after some time is when, and in spiritual contexts, you're trying in some way to break your ego down. And so the eco breaking down a scene in this context of like, well, I need this and so I'm being humbled.Stephanie:Yeah, you need that abuse and ripping apart every piece of need because I [inaudible] and I need to be separate from that.Lopa:Exactly. Exactly. So this is part of the growth and I just have to sustain it and all of that, and it can be tricky to assess if that is real, is it really actually good? And you do need to be cut down in some ways or we all have times in our lives where somebody gives us a reflection that we really don't like but we really fricking need. And that can really hurt to let it in. I think a prime present tense example is people beginning to see the embedded racism in their system for white people and I think that's a reflection that none of us really want to hold, but we have to. It's important to hold and that's a big ego, like we have to let the knife go in on that one, for example.Lopa:But then in these more kind of abusive context, it's like you have to look very closely at what is this person's motive? Do they really feel like it's coming from I am actually trying to help you in some way. And she always said that she was and this was all for us and all for love and all of that. And when it came down to it, some of the things that really kind of set us off towards the end was just realizing how incredibly unhumble she was and how unwilling to receive feedback or any kind of bi-directional. She gives a lot of feedback in our direction. And then we're like, are you kind of sitting on a pedestal and then freaks out. And so those were some of our cues. And sometimes it is, you find just this tiny little cue, and then that's the thread that lets it all kind of break down and then you realize, whoa, wait a second, what are we doing? Where are we? Why are we prioritizing every minute of our lives around this person?Stephanie:Wow. Can you get out? Because I always hear when you're in-Lopa:It's hard.Stephanie:It's hard to get out. So what does it look like you trying to get out of that?Lopa:Yeah. I mean, it's different for every person. For us, it was an outside reflection from somebody who was a relative stranger who brought up. He was like, I'm sure she's a really beautiful person, but I see some red flags and I'm just a little bit concerned and then gave some examples of other teachers who were very humble. And I don't know if he specifically chose these teachers because they're very humble or what, but it was a strange experience. My husband and I were both on the phone with him at the time. When we got off the phone, it literally felt like a bubble popped.Stephanie:Wow.Lopa:We were, wow. Okay, something changed. And we felt kind of naked and exposed. And then we were like oh, we just need to give her some feedback. She's kind of lost her humility and she's like, I am that, I am everything. And so we just need to sort of remind her of her humanity a little bit, right, because we're all humans. And there was a process of, we gave that piece of feedback and then over the next three weeks, there were 3000 emails sent between the group. I went back and looked at my gmail and it was like 3006 or something, crazy. 3006 or something absurd. I'm trying to [inaudible] language out of my vocabulary. And my husband really saw it quickly and was out and for me, it took a little bit more time where I was kind of questioning myself, oh, maybe she is the real deal and I just can't take it and all of that.Lopa:And therapy was a really big part of the healing and the reconciliation and finding my core sense of self again, which got adjusted over the course of this whole time. It was like, somebody questions your motive once and you're like, oh no, that's not where I'm coming from. And then they do it again and you're like, what do you mean? And then they keep doing it and keep doing it. And you move a little bit off of your center over and over because you start to question yourself, well, maybe I am this kind of showy person and you start to believe that. And that's gaslighting and that's how that happens. So for me, it was a process of kind of reexamining all of my beliefs and all of the dogmas that I'd picked up in the course of my life and all of these different things to get back to kind of what feels like a core solid sense of self and a lot of therapy.Stephanie:Wow. That's intense. Okay. So you get out of this cult and then what happens after that?Lopa:Yes. Well that year was a doozy. I now call it my own personal 2020. Now that we've had 2020, I'm like, oh, that was my 2015 because yeah, I left the cult, 3000 emails, I had an emergency back surgery while I was pregnant, I moved across the country a week later, lost a family member, had an emergency cesarean birth that was traumatic, I had a huge falling out with my family. I was fried. And so Rasa actually really came out of necessity. Necessity is the mother of invention. I was fried and I was like, I need something to help me keep going because now I had a baby waking me up, really precious little munchkin. And I tried coffee. I've never been a big coffee drinker because it's a little too much for my system. I tried coffee and was like, whoa, okay, irritability, jitters, panic attacks, sleep is even more messed up. No. This is a hard no.Lopa:And so I looked at all the coffee alternatives out there and tried them all. And I was like, really? This is it? Come on, we can do better, right? And I've been a big herb person, just an enthusiast. I love herbs. I've always had lots of jars of herbs in my kitchen and stuff like that. And I was like, can't we just put a bunch of really good herbs in there? And then I started to really think about here, looking at coffee in this coffee cup that people just don't even really question, this ritual of drinking coffee, it's even built into so many aspects of our culture in terms of don't talk to me until I've had my second cup of coffee kind of stuff.Stephanie:Community stuff like let's meet up for coffee.Lopa:Yes, totally, totally. People talking about how coffee is their personality. And I started being like, wow, this is something that people often actually used to override their body signals. So like their body's like, I'm tired. The answer is not rest or downshift a little bit or maybe I need a little time in nature or anything like that. The answer is often coffee.Stephanie:Yeah.Lopa:Coffee is the tool of a society that does not give two shits about anything except for your productivity in a way. And we buy into that and we do that. And I say this also in the context of not saying that I'm sure a lot of people listening, entrepreneurs, people out there in the world are like, no, you do not blah, blah, blah, my cup of coffee. I understand that. I really get it. It's not that coffee is bad or coffee is the devil. It's about how you're relating to it. Just like how you're relating to anything. Like a glass of wine with dinner is not a bad thing. It's a beverage, but if you have a real dependency on that, and that is something that you really need and you have two or three or four, it's all about right relationship fundamentally. So yeah, I started looking at that and I was like, wow, everybody's just drinking coffee, coffee jacks up your central nervous system. It causes a cortisol flood from your adrenals.Lopa:So it's literally triggering a stress response which is part of why you feel so amazing. And because the cortisol is there to help you be able to beat the tiger or run away from the tiger or whatever. And I was like, wow, that doesn't necessarily put us into our best selves. When I am revved up, I'm not necessarily kind of grounded in my best decision-making, my cognitive executive function is not operating from that wide spacious perspective. And so I was like, all right, what if we, and then there was this other kind of aha about coffee is also one of the few accepted bitter tastes in our culture.Lopa:We don't tend to love bitter in our society, but coffee is super bitter. And so as chocolate is the other one. And I was like, so there's a bunch of amazing herbs out there. Some of them taste kind of like crap, but if you stick them into this like rich, robust cup and with other things that are kind of masking the taste, you can actually get people to drink something that's going to be incredibly healthy for them every single day and is actually going to help them regulate their stress response.Lopa:And so that's where at that point, I started working with a herbalist. I love herbs and there's a bit of a trend out there of people just being like, oh, there's all these trendy things out there, let's just go ahead and throw them into a bag and sell them. And herbalism is a very, very long standing tradition. That's the original medicine, the people's medicine and there's a lot of science in there too. And so I think it's really important. It's very different to have a herbalist formulated product versus trendy things in a bag products. And so I worked with a herbalist and they actually did the formula. And so that was five years ago. We were kind of in beta for roughly two years. And then we hard launched in April of 2018 and now I am founder and CEO of a 20-person business and things are going great.Stephanie:Wow. That's amazing. So when thinking about formulating the product, did you go into it already knowing I want to have for sure these things in it, or did you really just relinquish control and just say, you tell me, here's maybe the benefits that I want to see or I want it to taste maybe a little bit bitter or not at all? How did that relationship go about?Lopa:With that original relationships, so that was my original co-founder, who was a very, very dear friend and now has a royalty on her formula and we bought her out. We didn't bring out the best in each other in a business context. So that's really good, if you're going to start a business with a close friend, you really want to look at them from the angle of would I hire this person to do these things? And have I ever gotten into significant conflict with this person and how did we do? And because as soon as you're dealing with money, it becomes almost like a marriage, it's way intense. And just our friction didn't quite work, but so she had these herbs that she was already working with. Lopa:And I made suggestions, I was like, I think we should add this. And I think none of them ended up in the final formula, but I was like, it needs to taste good. It needs to be really functional. It needs to have an energy component. It doesn't have to match coffee because coffee, I think is an unsustainable energy spike. But it does need to give people some kind of lift and I wanted it to be gluten-free, have no natural flavors, anything like that. So it's just herbs. And she went to town, we now have a herbalist on staff who is a clinical herbalist and he has reformulated that same formulation probably 40 times or something. And some of that is we've done some major reformulations to just continue to improve the taste and continue to improve the functionality. And then sometimes there's like, oh, this herb has a sustainability consideration and so we're going to swap that out and, oh, we're going to change it to a different source.Lopa:And then that source has a different taste. And now we have to adjust everything. But we actually taste every single batch of herbs and reformulate every single time based on the strength of the harvest of the herbs because you're always adjusting for climate and things that are totally out of our control and we want to have a consistent taste.Stephanie:Yeah. I love that. So the one thing I want to talk about too, and understand more is the industry as a whole around adaptogens because I feel like that word now it seems like it's on every product. And sometimes I'm like, well, how do I know what an adaptogen is? Is it real? Is it not? Because it seems like a trendy thing. And how did you think about that when entering into this industry?Lopa:Yes. Oh man, don't get me started. So first, how do you know what an adaptogen is? And is it real? So these are herbs that have been used for thousands of years in traditional context, in [inaudible], in Chinese medicine. And then in the 1940s, a Russian scientist named Nicola Lazaroff, there we go, thank you. He was basically tasked with giving Russian super soldiers and athletes an edge without a crash. And so he went to work studying all sorts of substances, including herbs and fell on these types of herbs, and he was like, oh, wait a second. This does give them the edge. They can go longer, harder, faster, more, and then they don't have a crash after the fact which is what happens with stimulants. And that's the issue with coffee is you get that crash in the afternoon because it's a kind of an unsustainable lift.Lopa:And so he initially started working with eleuthero which was the original adaptogen. And there are over 3000 studies on eleuthero, it's one of the most studied herbs and all through his research. And that term was coined, I believe, in the early 1950s. And so in order to be called an adaptogen, a herb needs to, we call it the four Ns, it needs to have a normalizing effect on the body. So it helps balance, helps you find homeostasis against environmental, physical, emotional, mental factors, all kinds of stress. It needs to be non-toxic in normal therapeutic doses. So it has to be basically safe. It's not going to, basically safe for most people. It needs to be nonspecific in terms of, there are many herbs where this herb is very good for the liver or this herb is very good for the blood.Lopa:These are herbs that work systemically and holistically in the whole body. And then that relates specifically to number four which is neuro-endocrine. It needs to have an impact on your neuroendocrine system which is your nervous system and your endocrine system coming together. And both of those, I want to go a little bit into the science, but so you have two main pathways that your body uses to communicate that you're under stress which is your hypothalamic pituitary adrenal axis and your sympathoadrenal system, hypothalamus pituitary adrenal axis is HPA. And the HPA axis is how your hormones tell your adrenals that there's a stress issue. And then your SAS is neuro-transmitters. And these herbs strengthened those two systems, literally like exercise. So they say that it mimics stress. But it's actually in a good way.Lopa:It's a eustressor. So it's actually like exercise is stressful for our bodies but it's in a good way, because we're getting stronger, we're getting more resilience, all of that, we're getting more flexible. And so adaptogens are literally doing that to your body's stress response system. So they have to have that neuro-endocrine impact as well. And this is also really interesting, just seeing adaptogens trending so much, many companies out there, I think, do not understand that there is a scientific criteria. It's not a marketing term. And there's actually a pretty small class of herbs that are scientifically substantiated as being adaptogens.Stephanie:Yeah, I was going to ask like how many are out there that have that claim against them?Lopa:Yeah. So it depends on who you talk to and who you look at. And we're actually working on coming out with a whole here is the definitive adaptogen guide. Here's what actually has the scientific backing. Here's why we chose these particular herbs based on these scientists and based on what we know and here's the list and here's what gets adaptogen washed. And this is a term that we've coined adaptogen washing where somebody calls something an adaptogens and it's not. So there's about, I think it's 39. And that number is changing based on the science. Sometimes they'll do a few more research studies and be like, oh, actually this one drops off the list or they do a few more research and they're like, okay, this one's definitely on the list. But depending on which scientist you talk to, there's either nine or 12 definitive adaptogens and then roughly 20 to 25 other probable adaptogens or secondary adaptogens.Lopa:And to be generous to the industry, we call anything that is probable, possible, secondary or primary an adaptogen. But many things that we see get mislabeled as adaptogens out there are Chaga is not an adaptogen, lion's mane, all the functional mushrooms, people are like, functional mushrooms are adaptogens. Nope, there's just two. And that is cordyceps and Lingzhi.Stephanie:I love Lingzhi.Lopa:Yeah, turmeric is not an adaptogen. Actually there is one other mushroom that's very little known called [inaudible], I think. But yeah, Chaga is not an adaptogen, lion's mane, turmeric. I've heard Matcha be called an adaptogen, [inaudible]. People just kind of throw it on anything. And this is an interesting case of an industry growing because we're overstressed as a culture. And this was going back to one of your questions about did we know what we wanted to put in that cup? And were we aware of that? We want to put the best stuff ever in a cup and adaptogens are the best stuff ever especially as a superior way to stimulate yourself that's more sustainable. And I believe that they're trending because people need them. That's what's happening right now. And there's a pretty uneducated consumer base.Lopa:And so there's a lot of knowledge to understand. And adaptogens tend to grow in really extreme environments which is why they're expensive. They grow on the tops of mountains, in desert, in these kinds of contexts. And it can be hard to actually get a full harvest out of them in the same way as like you could for other herbs.Stephanie:There's definitely a lot of education needed around this space. And it seems like so many new things are popping up. I mean, I was just at brunch the other day where my friends were talking about Ayurvedic diets and oils to use. And I mean, it was so much, I probably was like oh my gosh, I don't even know how to consume all the things you're telling me because it feels like everything I'm doing, I just never knew about any of this. Well, the same thing with adaptogens and understanding what that is. And there's a whole revolution, I think, of this new kind of nutrition and dieting and way of thinking that is going to take some time to educate the consumers on what that actually is and who's a phony and who's real and what's an actual real product or not.Lopa:Yeah. And what's actually going to have an impact. It wouldn't be such a problem, I think to have adaptogen washing if it didn't like also devalue the herb itself. And to another point, if I gave you something and was like, this has CBD and it doesn't have CBD, you'd be like, what the heck? And some people do call CBD an adaptogen, it's not, and that doesn't make those herbs any less amazing. Just don't mislabel them.Stephanie:Yeah, just use the right words.Lopa:Yeah.Stephanie:So yeah. I completely agree. So when you're starting this company, a lot of founders start out and they're really excited. And then sometimes they're kind of like how's this going? Is this my thing? Get a little distracted, and I want to kind of hear how your journey went with getting really excited about this, knowing you had a solution to something, what did that look like after you had landed on, I want to start this company? Was there any hesitation ever or wondering is this even my thing?Lopa:Yeah. Yeah. I think that's pretty normal. I hope to normalize that for people like, I've definitely had entrepreneurs come to me and be like, I'm not sure if I want to do this anymore and I'm like, that's okay. You'll have those days. It's really hard to create something. And yeah, I mean, my trajectory, let's see, that first two years there was a lot, well, the co-founder conflict really kind of clouded, yeah, my situation for a little bit. And so I was like, well, maybe I should do something else. And maybe I should focus on other things. And I just kind of kept coming back to this and I just kept being like, this is a good idea and I feel like it needs to happen. And I couldn't believe that there wasn't something like this out there. And then, I mean, it's been stressful.Lopa:It is a lot of work and learning how to run a business while running a business is hard. If I were to do this all again, I'd be like, oh, wow, this is going to be a lot easier going forward. I've been the co-founder in a few businesses, but it's very, very different to be actually at the helm. And the buck stops at you kind of thing. And yeah, work-life balance has been tricky. I have two kids now. I actually hard launched Rasa when my second son was four weeks old. Tough planning. It didn't quite go to plan as I'd hoped. And there's definitely a sense of the business would take as much energy as I would possibly give it. My kids would take as much energy as I would possibly give them. And so there's this feeling of, it's never quite enough.Stephanie:The mom guilt. The mom guilt is so real. I feel that [inaudible], yeah, I'm in the house recording. My three kids are usually on the other side of the door and I'll just be like should I be out there with them and having to be like, no, boundaries. Most people, well, not now, but used to go to an office and be away and that's okay. You got work to do. And yeah, work-life balance is definitely a struggle especially working at home now in the same presence as kids and family members and pets and all of that.Lopa:Yeah. We actually originally made the Rasa headquarters out of our garage so that I could be closer to my kids. I just wanted to be able to breastfeed for a bit, put the baby down to a nap, come back. And so we were in my garage until last September. It worked great for that time. And I was like, well, we're running a $2 million business out of my garage. This is solid, it's a small garage. It's not like a big old thing. But it was my garage. We had a storage unit in the back. We had a shipping container in our driveway. We had a shed, it was in all of our basements, pretty much every room had something Rasa-related. And so I was like, all right, we got to get out of here.Stephanie:Yeah. Your neighbors are like, what's this girl doing over there?Lopa:I know. They were like, this zoning. It was not up to code, but we're out now. So forgiveness rather than permission.Stephanie:Yeah, yeah, I agree. So I want to talk a bit about Amazon too because I saw that you were part of the Launchpad program, what do you call it? And I haven't had anyone on the show at least that I know of who's been a part of that. So I want to hear about your experience being on that and spreading the word about Rasa and getting in front of new customers and just being on Amazon in general.Lopa:Yeah. I mean, Amazon in general, Amazon has been a really solid channel for us, which is part of why we went with the Launchpad program. It's been just very consistent. The growth has been pretty steady and predictable. The customers there have been great too. We have some really consistent customer retention on Amazon which I think is not what we really expected. We have a lot of subscribers there. And so we were on the Launchpad program for about a year. We actually are just in the process of pulling out of it. They do take a 5% cut and basically, I think if you have somebody on the team who's really managing it closely and is really taking advantage of every single opportunity that they have, I think it's probably a really good program. We did not have that.Stephanie:What are the opportunities that they provide within that program?Lopa:Yeah, there's a lot of promotional potential. Some of those come with additional revenue cut. Some of those just require additional marketing planning and that sort of thing. And I'll say we have tended to... We actually for about the last year have really under indexed on Amazon. I think we could have autopiloted it. And we were like, oh, well Launchpad will be good and blah, blah, blah. So we may actually go back to the Launchpad program once we have our Amazon growth strategy a little bit more, but a lot of promotional opportunities, get on the front page. You get chances to do extra deals. They have the lightning deals and I don't manage the Amazon super closely. So our Amazon guy could tell you a little bit more, but yeah, a lot of emails came through where I was like, huh, we should probably do that, but we don't really have time. We don't really have the marketing bandwidth.Lopa:And I think now I look back and we're like, well, we want that 5% margin back. We can put that into ad spend. And I think that that's going to be a better use of that capital at this time. And if we had actually been taking advantage of all those emails that came through, you can get a dedicated account manager who will help audit your ad spend and all that stuff. If we were doing that, I think it would have been a great program for us. And it was positive, we've seen growth, but not quite enough to warrant 5% on every bag.Stephanie:Yeah. Yeah. That's quite a hefty margin to take out. For them to do-Lopa:On top of their original 30%, yeah.Stephanie:Ooh, that's a lot. So you pulled back to focus more on ad spend. I mean, what kind of channels were you relying on to get the word out? Because even though it is a big trend around this industry, I still feel like it's pretty niche to get in front of the right people who understand it and are ready to buy around this. I think it might be a little harder of a sell to get in front of someone who has to do the research like me to be like, well, what is an adaptogen? Is a good for me? And how did you go about finding the right people in the platform that'll work for you?Lopa:Yeah, well, we're really going after the coffee market and adaptogens are the way that we're doing that. So adaptogens right now, it's a $25 billion industry, but most of that's in Asia and because they have a cultural context around using these herbs in daily life that we just don't have. And so we are actually bringing a cultural context for these herbs through the coffee ritual and coffees is a $465 billion market. So we like that TAM a lot better. So that said, most of our customers are actually coming to us for a coffee alternative and then they're like, oh, it actually supplies all these benefits as well. And I think that's one of the things that we've been kind of working on and finding our positioning and our messaging in terms of yes, it's a beverage and it's delicious and it's intended to replace entirely or replace partially your coffee ritual.Lopa:But then it also has all these ancillary benefits, not ancillary. I mean, we get incredible customer reviews that say that it's just life changing. And so I think there's a way, and I think that's part of why we get an amazing long tail retention on our customers because we're delivering on more than they expected in terms of the impact. But most of our customers, we've been pretty heavily focused on Facebook. That's been our major scaling channel and that's a really interesting context right now because the iOS 14 change. And I think also with the pandemic ending, the buying patterns ending we hope, the buying patterns are shifting a bit as well. And so people are going back to their third spaces. They're going back out in the world a bit more.Lopa:And CACs are only going up. They're not coming down ever. So we sort of had a little... Facebook's been amazing for us. And I have had this little bug in the back of my head for like two years where I've been like we can't put all our eggs in this basket. We had one ad that, I mean, I think this one particular ad had done a million dollars in revenue for us or something. And it was based on something, it was a relevancy score. So in Facebook, they were categorizing by relevancy and it had a 10 out of 10 relevancy and we were like we could just dump money into it and it would just keep returning money. And it was amazing. And then they dropped the relevancy score as a factor all in their algorithm. And it was like our cash cow has died. It just suddenly, because the way the algorithm was prioritizing, it just didn't deliver in the same way. And we were like, wow, we're at the helm or we're at the whim of something that we have very little control over.Lopa:And so we're starting a little bit of a channel diversification strategy just to have a little bit more health in terms of what we're doing in the business.Stephanie:So many companies start out that way that I can think of and I think it's perfectly okay to rely on one channel. I mean, I've talked to a couple where they're like in chat within Instagram DMs, or Facebook chat, that's where our company's at. And I mean, we kind of went through that at mission too. We were very reliant on media and we became the top on there. That was where our business model was headed until one day they made a few changes and we're like, whoa, that just disrupted our entire business. Why are we relying on someone else's platform? We need to get off here and diversify. What kind of channels are you trying out now? And how did that make you rethink, relying on any platform in general?Lopa:Yeah, I mean, that's the thing. If you're diversified, then you have a little bit of a hedge. And so if something changes, you're like, cool, we're going to just flex the lever a little bit more over here. So we've been very under-indexed on B2B wholesale in general. We've never had a salesperson and we just considered it part of customer care. And if somebody came to us and was like, we'd like to order for our store, we'd be great. And that was kind of it. And so now just knowing that you can really scale a business that way, too. We're going to be investing in that a bit more. So we're in like, I don't know something like 600 retail stores at this point and-Lopa:So yeah, wholesale, actually investing in growth on Amazon, PR is something that we've also done almost none of. So actually working to in-house PR, I have come to kind of think of PR agencies as black holes where money goes to die. So I'm really keen on in-housing it. And influencers is also something that we've been very under-indexed on, just haven't put anything towards and it's all been organic, which is great. And we've had a lot of organic movement in all these things, but there's a difference between letting it come to you versus like, okay, now we're going to really focus on this. And then we have some international opportunities opening up as well.Stephanie:Cool. That's amazing. All right. So I know we're getting short on time and I do want to talk about crowdfunding and I know you mentioned you were very excited about that. So I want to dive into why are you guys crowdfunding? Why do you choose that approach? And you also mentioned innovative marketing ideas around that so. I want to hear all the things.Lopa:Yes. Yes. So DTC has allowed this new level of customer relationships and we have a lot of intimacy all across our communications and people always tell us they feel like they're talking to a friend instead of a company. And we love that and incredible brand love as well. And we feel like the logical next step of that is becoming crowdfunded or community-owned. And we've had lots of investors come and knock on our door and be very interested in what we've done and what we've been able to build, bootstrapped especially for a CPG business. And the thing that just kind of keeps coming up and especially for VCs, VCs are very extractive capital. And we actually talk about it internally. Like VCs are the coffee of money.Lopa:Coffee is an extractive energy source for your body. VCs are an energy extractive source of money for your business. And we do a lot of things differently. In our business, our culture is, I think pretty remarkable. We're doing a lot around sustainability. There's a lot of things where we're prioritizing a triple bottom line instead of a bottom line, just the bottom line. And we get nervous about the idea of getting into a relationship with somebody who's like, well, yeah, you can't treat your employees that way and you can't do this and that.Stephanie:You've got to return the fund to be worth it to me.Lopa:Exactly. Exactly. And we know that our customers love the way that we do things and want us to be more and more that way. So we're very excited about that and they just changed the regulations so that you can raise 5 million via crowdfunding instead of just one per year. And so we're very excited about, we're going to be hopefully one of the first to actually close a $5 million round crowdfunding. And some of it, we've just realized like damn, these businesses can be real capital intensive. And we're trying to do this with capital constraints which means people constraints and bandwidth constraints. And then we're trying to do a very high integrity product with a lot of value in the product and compostable packaging and just fair trade as much as we can all across the business and treating our employees really well.Lopa:And all of these different things that just does cost money, cost more. And then we're like, well, we want to grow as well. We want to invest in growth. So we've been basically break even except for investment in growth for a while. And we were like, if we had more capital to invest in growth, we know that the business is financially sustainable and really solid. And so if we just can get that growth capital and so that's basically why we're doing it. And when you're building a brand that people love, going into some of our marketing strategies around this, when you're building a brand that people really love, and then they're also becoming owners of that brand, I think there's a big question about what's secret, and what's not secret.Lopa:And there's a lot of secrecy in the CPG world and in business in general. And we are seeing that the more transparent we are, the more our customers just eat it up. And they love the behind the scenes about the business. And they love just knowing about why we made a certain change in our packaging and stuff like that. That's where we get the most responses. It's kind of crazy. And so we are shifting towards being more and more open about margins, our run rate and including people in these details allows them to be included in this incredible journey of launching this product. And so we're going to be doing a lot more around this. We're kind of working on building the internal content engine to be able to just be a more and more transparent and share more and more about what it takes to do this and the hard decisions and the hard moments where I'm like, oh my God, my kids and this and the business and all that stuff.Lopa:But our customer reviews are incredible, so incredible. We have to be editing them for the FDA. We've had people say that they had a Rasa baby, it's made them more patient with their partners and their kids and all that. And that's why we got into plant medicine. We knew the power of these things. And so I think crowdfunding is a way of getting people invested in the business and having the business actually be like herbs were originally the medicine for the people and now it's going to be a business about herbs for the people as well. And so it just feels like it's really perfectly aligned.Stephanie:I love that. I mean, I think the idea too around transparency, not only does that give your customers things to look at and engage with you, but I think it also invites help too. If someone sees oh, your margins are around this. Let me come in and help you because I think maybe in the CPG industry, maybe they should be around here. I've got this idea around logistics that might help you enhance that. So I think the more you share, the more other people might come in and be able to actually help and want to lift everyone up in the process.Lopa:Yeah. Absolutely. Absolutely. And I think in the industry, that is really valuable. Sometimes there's always a question of how much feedback you get from where. And sometimes you're like, wow, that's a lot of people that want to help and I don't really know what they're doing.Lopa:But I mean, that said, we listen to every piece of feedback too. And I think going back to the cult conversation a little bit, when you get feedback that you don't like, you have to look at it and say like, okay, if 1% of this is true, what part would be true? And then look at that. And that's one of the nice things too about DTC is that we have been able to actually iterate our products very quickly based on customer feedback. And I think having more transparency also means that we're going to be able to crowdsource product ideas and reformulate things to match people's needs more and stuff like that which we're really excited about.Stephanie:Yeah. Yeah. Super exciting. All right. Let's do a quick lightning round. Lightning round is brought to you by Salesforce commerce cloud. This is where I ask a question and you have a minute or less to answer. Are you ready?Lopa:Yes.Stephanie:All right. What's your favorite Rasa drink to enjoy in the morning?Lopa:Super Happy Sunshine.Stephanie:Okay. Awesome. If you had a podcast, what would it be about and who would your first guest be?Lopa:It would be about cultivating energy intelligence, emotional intelligence but energy intelligence. Yeah. And my first guest is a great question. I have not even thought about that. I mean, if I could just wave a magic wand, I would actually have Brené Brown because we don't think of the way that we hold ourselves in our vulnerability as being actually kinks on our energy. And I think that her work around vulnerability and shame is actually very energy liberating.Stephanie:Yep. Yeah. I love her. What's up next on your reading list or your podcasts list?Lopa:Oh man. I have such a long list. I'm in the middle of The hard thing about hard things by Ben Horowitz. And I'm also reading a book about the ancient Indian martial arts that I practice called [inaudible] and I'm in the middle of like five books right now. Another great one, oh, just Hunt, Gather, Parent.Stephanie:Oh, I'm reading that now.Lopa:It's so good.Stephanie:So good. Yeah.Lopa:Oh my God, so good.Stephanie:It makes you-Lopa:And it's working.Stephanie:[inaudible] parenting in general like oh, why are we basing our parenting advice off? What does she say? The past 100 years or something when there's time-tested things that work for thousands of years that we can tap into and around the stress of the parenting right now is only on essentially the mom or mom and dad where we're doing the same work that used to be 15 people, grandparents, cousins, aunts, and uncles. And I'm like, there's going to be a shift though. I think it's going to start heading in that direction again.Lopa:Yeah, I think so too. And on the podcast, Fred, I'll say, I actually was looking at your list of podcasts and I was like, oh my God, I need to be listening to all of these. So well done. I love business-Stephanie:[inaudible] podcast, hey. I love that. Yeah, check them out. They're good ones. Launching new ones all the time too. And the last one, what is the best piece of advice you've ever gotten? It can be business, personal or from the cult, whatever comes to mind.Lopa:Best piece of advice I've ever gotten. Lopa:What comes up is that purpose is a red herring and that so many of us, I think in this, it may be a little bit less for your audience. But I think that this quest for what am I supposed to do and what is my purpose? And I can only really do something once I have my purpose. The advice was stop wallowing and trying to find your purpose and do something. And you will find your purpose in the process of acting. You will find the things that don't feel aligned and then you'll adjust. And so it's about help someone and help something and you'll find purpose in the process of doing.Stephanie:That's amazing advice. And that's actually perfect for our audience right now. I mean, people trying to start businesses and I mean, you probably went through this too. I know I have of, is this my thing? Am I passionate about this? Do I want to do this for the next 100 years? And I love that. Just start doing it and you will figure it out.Lopa:Yeah.Stephanie:That's perfect. All right, Lopa, well, I've loved having you on. It's been such an engaging conversation. It's really fun to hear about your life and Rasa. Where can people find out more about you and your company?Lopa:We are at wearerasa.com and we actually have a discount code for you guys. If you use the code upnext, you'll get 20% off your order. And we're also on Amazon and we're on Instagram and Facebook at We Are Rasa.Stephanie:Amazing. I'm definitely using that code. I cannot wait to try it. So thank you so much for joining us. We'll have to have you back for round two to hear how the company is going because this is such a pleasure.Lopa:I would love that. Thank you.
Most people probably know Cuisinart because of the company's kitchen appliances like the food processor, air fryer, or coffee maker. Cuisinart's products are everywhere — in kitchens around the world, in retail stores, and yes, online. In the last year or so, Cuisinart has put a much greater emphasis on the DTC part of the business -- walking the tightrope of being there for retail partners, while still making sure that there is enough inventory to meet the demand coming from online. On this episode of Up Next in Commerce, Mary Rodgers, the Director of Marketing Communications for Cuisinart, explains the steps the company took to make the pivot to DTC without leaving retail partners in the lurch. Mary also talked about how the marketing and online pushes for products went from being planned out months in advance to changing from one day to the next. Enjoy this episode!Main Takeaways:From Months To Weeks To Days: Sometimes, the world moves so fast that planning in months-long cycles places you at a disadvantage. When demand, retailer needs, and inventory is shifting at a rapid pace, you need to come up with a plan that allows you to stay ahead of the curve, even if that means changing strategies from one day to the next.Eyes On Your Own Paper: Some brands will look to their competitors to see what influencers they are working with or how they are running their campaigns, and then they will try to copy that approach. While this is tactical, it is not strategic because you are placing blind trust in another brand's team and vision without even knowing if what they did paid off. You have to do your own homework and think about your customers' needs and build a strategy around that rather than just trying to keep up with the Joneses.More Than Just A Product: Brands have to think beyond the products they sell and understand how the customers will be using those products. Often, especially in housewares, consumers will be using one product in concert with another or as part of a recipe. By understanding the life of the consumer beyond purchase and coming up with content to connect with consumers after the fact, brands can create a more fruitful and loyal relationship with their customers.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Welcome back to Up Next in Commerce. I'm your host, Stephanie Postles, CEO at Mission.org. Today on the show, we have Mary Rodgers who currently serves as the director of marketing communications at Cuisinart. Mary, welcome.Mary:Hi, I'm so glad to be here today and join you. I'm really excited about talking all things marketing.Stephanie:Yes. I can not wait. So I'd love to kind of, before we get into Cuisinart and your role there, I want to hear a bit about your background and how you even entered the world of housewares and cookware and all of that.Mary:So back in the day, I actually worked for a retailer and they worked in the housewares department and I went up through the ranks there getting to the level of assistant DM. And so that wasn't my favorite thing is, was involving a lot of scheduling people and logistics. And that was kind of my foray into the home goods' area. And then I also did work for publisher for short period of time because my background was basically literature and journalism up to that point when I was studying in college. And then I transitioned into marketing at that point in the publishing world.Stephanie:Okay, cool. And when did you get introduced to the role at Cuisinart?Mary:So I worked for a company who is much more of a legacy company. I work for a company called Farberware. They were really well known. They had a manufacturing facility in the Bronx. And they basically did everything there. We did product development, engineering. It was a really great learning experience. And my previous boss, I worked for another company called Dansk, who is now owned by Food52, they just bought them recently.Stephanie:Cool.Mary:And my boss there went to Farberware and he asked me to join him there. And then that got sold and dismantled in '96. And I had always had Cuisinart on my radar. I thought it was a really great up and coming young, kind of small organization that I felt had a lot of growth potential, which turned out to be true. And so I actually reached out to them. And I didn't know it at the time, but they were looking to fill a marketing communications position for quite a long time. Their previous person in the job had left. So I was the only candidate. But they loved my background and obviously my experience in housewares and also the fact that I had pretty deep product development experience. That wasn't the direction I wanted to go in permanently. I mean, I'm glad I know that process and I've done it, but my real expertise is marketing communications.Mary:So it's really interesting because when I joined in '96, as you can imagine was very, they really hadn't done any real marketing, not much advertising. They just really were just scrappy entrepreneurs. I think of ourselves, is that still today, but for different reasons. And it was like, the media channels then were like five channels unlike today. So obviously, as you can imagine over time, things have changed dramatically compared to when I first started, when we were so focused on things print advertising. And we matured into things like understanding the value of TV advertising. I actually built a model for the company to show them the impact of TV advertising on sales and trajectory that you can get from that.Mary:And so we forayed into that and really started building out, strengthen multiple channels and not just one. And so, today obviously it's like a whole new world. And I also like to say I consider myself a modern day marketer because there's so many things you have to be, not just aware of, but understand, now that you didn't then. It's kind of like, back in the day, you knew what the impact was on business, but now you really know what it is because you have hard data, where in the past you would rely on your retailers or sell through retailers. And so things are much, much more sophisticated now. And you also have many different avenues to test and learn too.Stephanie:Yeah. Seems like too, over the past couple of years, I mean, especially the past year, I'm sure everything's had to be rethought, replanned and planning cycles kind of go out the window. Annual plans turn into quarterly, turned into daily. And how did you guys adapt to that, the changing consumer preferences of all of a sudden people are at home, they're cooking, they need all the things to make the recipes? And I'm sure a lot of things had to change on your side as well to going to keep up with that.Mary:Yeah. One of the biggest challenges we had in the last, basically year and a half, the challenges are similar now, but for different reasons. So basically, we keep our eye very closely on trends. And when I get up in the morning, I'm reading all kinds of articles and information and just everything changes on a dime now. So you have to be on top of it all the time, but we also started to hear things from our retailers, like they were looking for goods that they maybe weren't looking for before, like bread makers, waffle makers, more coffee makers, coffee grinders because people during the time when lots of places were closed, they still wanted a great cup of coffee. They had to make it for themselves basically.Mary:So what happened for us was, and I'm really very proud of our team on this because it took a lot more effort because in the past we didn't have to worry about like, "We're out of inventory of this, we're out of inventory that. We sold out every last ice cream maker we had." In the past, we always knew we had stock and buffer stock and we never had to drill down. If we knew something was out of stock, it wasn't like 10 or 12 items, might be one-offs or something. So we ended up going from an annual planning phase to quarterly, to monthly, to weekly, to daily. And we spent a lot more time and effort on operational issues, just moving inventory to our D2C business, which became a whole hoo-ha.Mary:And then also just making sure that we had inventory. We at least had certain amount of retailers that had inventory of an item. And with every marketing program we did, we did that. So it took a lot of juggling. We had to push things out. We had to keep our eye on incoming inventory when it was going to be available, when retailers were going to have it. And so it became very tactical to be completely honest with you. Like something that you think is your strategic, but it doesn't matter, at the end of the day, you're going to have all the strategy you want if you don't have the goods, right?Stephanie:Yeah.Mary:And we also, I personally noticed this with some of our retail partners, because a lot of the retail partners in the very beginning went into complete shut down. They shut the stores down. But they can't easily turn things off. And so they were running campaigns for things they had no product, which is the one thing that makes me crazy is to know people are spending time, money, effort, and resources marketing something that you can't sell because you're not going to convert if you don't have it. So whatever data you do get is not going to be very valuable at all. And then it becomes no history. Right?Stephanie:Mm-hmm (affirmative). Mm-hmm (affirmative).Mary:So you look back at that program, and you're like, "Well, it didn't do well." And then you have to remember all the things around it that happened. The reason why it didn't do well. And then you just wasted a lot of effort for no-Stephanie:No return.Mary:... benefit.Stephanie:Yeah. So when thinking about a daily planning process, what were some of the key lessons when you look back, you're like, "Oh, this would have helped make it easier," and are you still doing that today right now? Because that sounds insane, looking every day at the trends and hearing from the market and being like, "Oh, people want this, and now it's shifting here and we need a marketing campaign around this." And also getting all the backend right and making sure that you've got the inventory and it's all tied together. How would you set it up today? And would you still advise on daily planning processes?Mary:Yeah. So I would say to you, it's not the way we like to do things. But it was just, we just didn't want to be spending time, money, and effort on something that wasn't going to produce for us. So we felt it was necessary. And I would still do it today because we were, I mean, we are nimble. So the fact that we could say, "Hey, bread makers are doing really well right now. Let's make sure we're making people aware that we have bread makers and we're selling them." And I mean, that was not that big of a challenge for us, but when we ran out of bread makers, I had to say to our team, I'm like, "Well, you know what? Even though you don't have a bread maker, you can still mix dough in a food processor or you can use one of our stand mixers." And so change the storyline basically and look at it from a different direction.Mary:Or the other thing we did is when there was a yeast shortage start giving people ideas on other things that you can make that don't have yeast without having to go into the whole sourdough trend which would have been, not exactly making bread today. Right?Stephanie:Yeah. I love that. That's like, making do with what you got and just shifting the storyline. I mean, because I think the amount of searches I've always put in to be the replacement for soy sauce, the replacement for eggs, and really leaning into that trend of being like, "We can't help you here, however, you don't even need that thing. And now maybe you do need it." How do you get your team thinking in that kind of mindset? Because I'm imagining when you come to daily planning processes, you really have to decentralize the entire team structure to let them make these quick moves and throwing campaigns and setting them free to do what they know is best.Mary:Yeah. So I mean, my style, my leadership style, I'm not a micromanager. I don't believe in micromanagement. My personal belief is that when you empower your team to own their business, they're more committed to it. And so that's the approach I take, but I'm definitely involved in all aspects of the business and guiding them in those ways. Trying to help them think a little bit differently about their approach. But at the end of the day, they're the ones coming up with the alternative content based on those comments. I'm not the one doing that. I'm definitely letting them own all of that themselves. And we work with a lot of external agency partners. So we work really, really closely with them and they are also working with each other.Mary:So it's not a siloed system, basically. All our agency partners know each other. We are really good at making sure that we're having constant lines of communication open based on whatever's happening in our business. And also down to any aspect of marketing that we're using to promote product. And then the only thing I would other say is that you had asked me earlier about what's changed compared to last year? So I'm sure you've heard that the marketplace, the supply chain marketplace is still highly disrupted, but for different reasons now. So the reasons now are basically raw material shortages, huge increases in the price of containers, cost of containers.Mary:And most people in the durable goods category, they are bringing goods into the country. And then a lot of people are spending time trying to diversify their supply chain in order that they're not heavily reliant on one point of reference for their goods. But that's also something that can't happen overnight. That's something that has to be, it's long-term. That's a longterm position. But we're already hearing in the marketplace that some competitors are basically not going to have inventory of certain items. It's not going to happen. So we also then look at those opportunities and try to capitalize on those opportunities because if we do have supply of similar product in the same category, we are going to try to help out our retailers and make sure that we get them supply to fill those holes for them. And so our team, we have a decent-sized planning team that work really closely with the division heads to make sure that they're focusing on the items that have the greatest need.Stephanie:So how do you create a open conversation with retailers or other partners to figure out what they're missing? Because it seems like in a way, once you would structure a partnership where they're like, "Oh, you always give me bread makers. That's what I know you for." I would think that they wouldn't think like, "Oh, I should share that I also need this isn't this," because they're so tunnel vision on like, "My partner does this with me." So how do you even go about developing that relationship? Or they will say, "Here's some gaps right now in inventory that we just can't get, can you help us?"Mary:Yeah. I mean, that happened last year. So those conversations were had over the last year and a half. And our sales team works very closely with their retail partners. And so they're having those conversations on an ongoing basis. And it also helps out our retailers and it also instills us as making sure that we're helping them protect their business too, because I'm sure you realize this, if you went around six months ago and you went into some of the retail establishments you would see empty shelves and you would see big places in the home goods' area, where there was not a lot to purchase in person.Mary:And so those are ongoing for us because we also work really close with them planning ahead because encouraging them to make sure that they get their forecasting done months in advance so that we can buy against that forecast and protect their orders so that they have good supplies, especially as we go into the back half of this year, which for us, my team calls it our Super Bowl because that's our peak season basically. And so we want to make sure that all the stars align. And our marketing is pushing the items that we can focus on, but we also make sure that, like I said, inventory is essential for us.Stephanie:Well, if that's so, is there anything, any big bets that you guys have made, or that you're implementing right now, especially around supply chain or something that's just totally different than how you used to do things, and you're not really sure about the outcome, but you think you're ahead of the game? Because I've heard a lot of people come on the show and talk about this as a big issue and there's room for disruption in the whole logistics and supply chain and warehousing and all of that, but I haven't heard many people be like, "We're doing it this way now and it's working." Or, "We're going to explore it this way. And we think there might be opportunity around adjusting these things."Mary:Yeah. I mean, I have those conversations all the time. It's like, "Okay, we need to get our fall marketing plan locked down," because, and you know this, it's not something you turn on in a day. It has to be those big campaigns, tent-pole type things are planned months in advance. And so I was already having those conversations a month ago, basically like, "These are the items I think we should focus on, but I also need to have confidence that we can have product." So we honed in on the items that we're pretty sure that we can generate demand, but also have appropriate supply of goods. And we're also making sure that we are doing some other things which involve our retailers, like aligning our retailers so that they are working in the same playbook we are because it's, I call it compounding interest. That's kind of how I look at it.Mary:I tell our sales team, "Look, if you were smart, you would take advantage of this. This is what we're working on. And we were very transparent about it with our retail partners and our sales team, because the more we're all pushing in the same direction, we are going to be more successful." And we're also doing a lot of other things like digital audits and making sure that our digital shelf, not just for ourselves, but for our retail partners are clean and tidy and neat and organized the right way and they have the right data specs and content and all of the things that they need to make sure that they're successful on their side. So it's not just about the marketing that we're doing, but it's the support that we provide to the sales team and the retail partners that extend basically.Mary:And like I said, I call it compounding because for every one of those partners I can get in line, the more powerful the campaigns are across the board.Stephanie:Yup. I mean, I definitely understand that. It's like, "Why wouldn't you all be kind of rowing towards the same end point? If you guys are having a big campaign push why wouldn't they also invest in the same thing instead of having diverse efforts?" What are some of the biggest gaps that you see on retailer websites when you're saying you want to make sure it's clean and tidy, they have all the right information. What are some big missing pieces that when you go in and you do your digital audits, you're like, "Ah, once again, you're missing this or you're doing it this way. And we know that it's best to do it this way." Because I'm sure you're not the only one who is struggling or finds those kind of things on the retailers websites.Mary:Yeah. So basically our focus has been along naming conventions and search. Those are the two things that we've put a lot of effort into. So on-site search for retailers, every retailer could be using a different partner for search or self-developed search, or however doing it, it's just that, it could be different for every retailer. So that has been a big focus for us. And then the other thing too is making sure that any content that we're developing much more. So in the lifestyle area, that we are making that content available for all of our retailers and sharing out because that's become a big, I don't want to say burden, but it's been, every retailer has different specifications. Like, "I want seven lifestyle images and I want this and I only take this size and only take that size." And just the whole logistics end of it because as retailers are not developing content for every product that they sell on their digital shelf. They're not doing that. They're repurposing content.Stephanie:Yeah. I mean, how do you know, first if they're using it, using it in the correct way? And also, do you see them putting their own spin on it? Because there's been a few times when I've seen, maybe I go to Cuisinart and I'm like, "Oh, that was an epic video product placement." I just associate it with you guys potentially. And then maybe I go to, I don't know, HomeGoods and same content. And I go to Macy's, same content. And then you start being like, "Wait, who started this content?" I've seen that happen a few times with brands where they're all reusing the same stuff. Are you encouraging your partners to repurpose it, put your own spin on it, put your own voice on it, use it how you see best fit, or are you just like, "Here's the box that you need to work within?"Mary:Yeah. So how we protect ourselves against that is we develop our own custom content for ourselves. So that's how we set ourselves apart.Stephanie:You're the original. You like [crosstalk]?Mary:Yeah, instead of... I mean, sure, you realize this is duplication of that, it doesn't necessarily help with SEO related things. But retailers have so many products and they're so big. When you think about, what one retailer, or how many SKUs they have online versus an in-store environment, they're heavily reliant on brands to use that content there. They're just not going to develop that themselves. The sheer amount of resources that they need to do that is, it's not going to happen basically. And obviously we've put more emphasis on it ourselves because not only, do they need the content, but we need more content ourselves because we're not just using the content on our website, we're developing it for social, for digital, for every avenue, for work that we do through our PR agency. It's used in every channel.Mary:But like I said, the way that we differentiate in that area is that we are also developing custom content for ourselves. And we do also have retailers that they will change up their hero copy and this and that. I mean, when we do those audits, we also make sure that the information is correct and they don't go off the deep end. Stephanie:Yup. Yup. I can imagine there being a lot of value in what they're seeing on their side around the kinds of content that's working. Maybe they're getting some kinds of content from you in one way, and then different styles from another brand. Is there any data sharing there where they give feedback of like, "Oh, we see this toothbrush brand doing this and it's working really well. Our customers like this." Do they ever share that feedback and then help you rethink the content that you all are headed or going to create?Mary:Yeah, interesting that has never happened, but what we have done ourselves is that we obviously keep our eye on what content performs best and then we produce more of that type of content. So like most brands, user-generated content tends to perform much better. We work with a lot of influencers who obviously built custom content for us. And that's the stuff that performs much better than... I'm not saying our stuff doesn't perform, but in comparison, that material. It's also, somebody, it's brand appropriate, it has the proper brand essence to it, but consumers like to see other people's material and they gravitate towards it. And they're more engaged in it. And so we put more of a focus.Stephanie:Yeah. Are there any big bets that you all are making in marketing campaigns or content that you're like, "This might not pay off or this could be taken the wrong way, but we're going for it?"Mary:I mean, not really in that sense, but in the sense of social shopping, we're putting more of a focus on social shopping and being able to track that. And we also just launched a campaign and we had positive ROI on it. So that's where everything's going. It's like making sure you have a positive ROI that you are testing and learning and being able to quantify. It's the benefit of the digital world. You can actually see the results of your efforts and what they produce.Stephanie:So earlier you mentioned influencers. And that's something on the show that I've heard a lot of mixed reviews around of what's an influencer? Who actually classifies as that? When does it deliver results? And how are you guys going about finding the right influencers and partnering the way that you get a long-term ROI?Mary:Yeah. So we've been working in this area for quite a long time. We don't focus on celebrity influencers. That's not our thing. We are most interested in aesthetic and brand alignment and also the fact that our consumers are very oriented around food and food is a big part of their life and they're very interested in recipe ideas and things like that. So we have a whole, we've developed an entire set of guidelines for influencers and also for any work that we're doing in social media for ourselves and for our licensed partners.Mary:And we have also over time found a few influencers that we've had ongoing partnerships with instead of one-offs. I'm sure a lot of people that you talk to talk about where this is going, where the influencer marketing field is going, because obviously there's a lot more brands using it in comparison to even one or two years ago. It also, when you get into that situation, you can be driving a pricing and a few other things. And those are all obviously concerns for everybody. And then also the fact that you also want to have separation with competitive brands which is a big concern. And we stay on top of all of that.Mary:We're not currently using a platform to vet influencers. We don't do that. We work with our PR agency Magrino, and they are basically doing the research and handpicking appropriate influencers. I mean, they know our guidelines and they know what we're looking for. And we also work with the influencer and also get their stats from them and making sure that they're in line. We also get contacted by a lot of people directly through our social channels, or even just through email wanting to partner with us and we explore all those opportunities, but at the end of the day, it also has to align with our needs and our guidelines and also the needs of our consumer.Stephanie:Yeah. We've heard quite a few brands saying, "Anyone can be an influencer essentially, and it's not the big celebrities of the world anymore. It's anyone who has even a couple of thousand followers, if those followers are engaged and ready to buy." Are you seeing those more, the micro influencers working better than just, like you said, you don't even go for celebrities? So what do you look for when you're trying to find someone who's going to be a good fit for the brand and also deliver good results?Mary:Yeah. I mean, our biggest thing is engagement. That's what we are interested in. We're interested in engagement. We also have a certain level of followers that we're interested in, not in the small thousands per se, but those are all key vetting points for us. And then also we check their handle, make sure that the work that they're doing is aligned with what our consumers want to see also. We don't want to see overly promotional. We want to see some separation. We also want to see, like I said, engagement is a key factor for us too.Stephanie:Yeah. And it seems like that's where the world as a whole is headed around organic content, authentic UGC, not the way that it used to be even just a couple of years ago around, you see a channel, wherever it was and being like, "Oh, obviously their whole goal here is just to sell, sell, sell." I rarely see that working anymore. And if you see people doing that, they quickly start falling down the ranks of, "Why am I even here if you're just selling this one haircare product the entire time, and there's no other content. I don't feel connected with that." So it seems like everything's kind of shifting in that direction.Mary:Yeah, it definitely is. And people want to be inspired. That's why they're on these channels. They want to be inspired, they want to educate themselves a lot of times. People are very visually inspired and they want to... I mean, I even know myself the types of things that I use social media for, it's education too. It's about, I happen to study Italian, so I'm very oriented. I follow a lot of people in Italy and cookbook authors and things like that. And I'm there to learn. I'm there to be inspired by their knowledge and the recipe ideas. And it doesn't matter, it just matters what the consumer's passionate about. And that's what you have to deliver to them. They don't want to be hammered over the head every day with, "Buy my blah, blah." I mean, that's not why they're there. And then, as you said, what happens is over time they tune out.Stephanie:Yup. Are there any, what maybe some would call competitors that you'd be open to being shown up against, because I see that being a world where you're like, "Oh, I really want this influencer. They're really big in the food scene, but they also use a semi-competitor products." Are you all okay with that? Or are you like, "Oh, it has to be semi-exclusive," or, "You can't feature other competitors on your channel as well."Mary:Yeah. We wouldn't do that.Stephanie:You wouldn't do that? That's hard no.Mary:We're too competitive.Stephanie:Yep. Hey, I like it. That's great.Mary:Yeah. I mean, we even go to the point where we, "When you're taking photos, we don't want to see competitive product in the photo." I mean, and I assume people over time also do the same thing. But yeah, we're very competitive. We want to see separation. We don't want to work with somebody who is like, been all over every competitor known to man. And hey, I know for a fact that people probably go on our channel and see who we're working with and use us as a free game for not having to find their own influencers for all I know, and we don't do that. We don't do that at all. I would not encourage that. That's kind of the lazy man's way out. But yeah, we don't do that.Stephanie:That's not a long game [crosstalk].Mary:No, it's a short game. And the thing is, it's like, if you're in this for the long haul, you're going to do it from a strategic perspective and not a tactical perspective. And to me, that's tactical because you're assuming whatever I'm doing is going to work for you. And your brand's, different brand. Your consumers have different needs and wants. That's what you need to focus on.Stephanie:Yeah. And it's putting way too much trust in another team that you don't even know what they're talking about. Why they're doing that. You don't even know what they're partnering with that person.Mary:And the other thing is, you don't even know what the stats are, how it produced, how it performed. I mean, now at the end of the day, you really don't. So we don't do that. It's not even in my mindset to be completely honest with you, but I'm not saying that other people don't take that tactic.Stephanie:Yeah. Yeah. Got it. Earlier you were talking about creating these shoppable experiences. And before the show, I mentioned also headless commerce and you're like, "Oh, I mean, is that even a term anymore? We've been doing that forever." I want to hear what you guys are seeing around what some would still say is a trend. And we've had some people be like, "That's not even a thing," or, "It's here to stay." And I'd love to hear your perspective since you guys are the maybe OGs in this. You've already been doing it.Mary:And it was one of those things where we did it for a different reason. Well, it was similar reason, but different. So this is like years ago, our shopping cart aspect of our website is completely separate from the web property and the reason it was done like that was that we were working with a fulfillment company. We've been selling direct-to-consumer for years and years. It's just that we use a fulfillment company. Consumer have this shopping experience on our website, but the orders were sent to a fulfillment organization. They fulfilled them. And we kept the consumer in our ecosystem because I wanted it to be able to own the data.Mary:So this was like more forward-thinking. Now, this is like all the trend. People are like, first-party data, first-party data, but that's how I protected my first-party data years ago. And so in a way, thank God I did it because when we wanted to bring the D2C business back in-house in late 2018, I didn't have to restructure my entire website. I basically just had to plug in a shopping cart basically at that point. And then last year in the middle of the year, we transitioned our entire web property to Episerver, it's a DXP, and still kept the shopping cart separate. And what we ended up doing, it was you made as much of the site [CMSable] as possible so that the marketing team can virtually do any day-to-day operation that we need to change a price, add a new product, build a landing page. We just finished building out blocks so that we can build custom landing pages. We can literally do anything ourselves.Mary:And so the idea was we wanted to be a masters of our own domain basically, because in our previous situation we used one web development company and they did everything for us. And unfortunately, over time as the brand became more mature, it didn't make sense for us anymore because we really needed experts. We needed experts in SEM, SEO. We needed experts in web development, in the latest best platform to use. And we also wanted to be more in control of our business. So we didn't have to open a ticket with IT. And the SDP emails me, is like, "Hey, I think we changed the price on blah, blah, blah, can you fix it on the website?" I'm like, "On the fly." Kids do it in 10 seconds, and not even... So this way we're in control of our destiny, basically. We're not heavily reliant on any one thing or any one agency. And this way also, if we decide to change agencies, we're not stuck.Mary:And that's one of the things that is really important for us and for our business. And not having to get in line at the deli stand. No seriously, I say I'm a point A to point B person. I don't want to have to go through five people to do something. I want to be able to control my destiny and the destiny of the company and the brand. And that's how I look at it. And that's how, it's more work for us because now instead of dealing with one agency, we're dealing with multiple agencies, but that's what's best for the company. And that's what's best for the brand because when you get to a certain level, you need to be reliant on experts in the field.Mary:And this is where vertical integration is not necessarily the best thing for your business. And so it depends. I know some people are all up for vertical integration, but what happens over time is when you're not continually developing those people and making sure they stay best in class and they only have one client, you get denigration over time, basically, in my opinion.Stephanie:Yeah. I mean, there's no incentives to keep doing better and better if you're getting paid the same amount to, essentially, if you can make it less work. And I mean, and they're not going out to the market and shopping it and doing our piece. They're like, "This is what we got right here. I'm doing a flat line thing for anyone." Obviously it's like, "Would have stepped in with our hand." But I mean, I also think about it's the company, the age of the company and where they're at in that life cycle. And it seems like it always starts with, you've got the founders and then it's very dispersed and you're hiring all these agencies and, "I need social, I need this, I need that." And it's all over the place. And then you start to bundle it back up again and bring things in-house.Stephanie:At what point do you think that companies should start considering pulling things back in-house, controlling their own destiny a bit more and not relying on just one or two agencies to control what's happening and where they have to wait in line at the deli stand, as you'd say?Mary:Yeah. I mean, I think it depends on your business because for where we are and where the brand is now, it's more important for us to be working with what I call best in class. And the thing is, unless your organization is continually investing in talent and adding head count and all those things that companies are not necessarily looking to do. The sheer amount of people you need to keep that train running is probably unreasonable. And so for me, I can't even imagine us bundling this all back and bringing it in-house. I just think our needs are greater than that at this point. But I'm not saying it'll never happen. Things change every day, but at the end of the day in my experience, when you have some of these in-house organizations, it slows down your business. It's slow. It's like, "Okay, here's a common service area. There's nine divisions. And we all have to use the same point, the entry and get in line."Mary:And it's like, things never happened. It's like the slow boat. It's not easy. And the other thing too, is what ends up happening sometimes with organizations is, "Let's have so-and-so do it." And they have no expertise, they have no experience, they have no knowledge. And so that person's not really the right one to be there, but they're handed the thing and it's not necessarily the best outcome. So for me right now, I'm not intending on rebundling and bringing anything back. And first of all, the sheer lift on that would be insane. And you're also talking-Stephanie:And you also let the team go and hire too, which I love. I mean, the team be on a find a cool vendor and find a cool agency to work with it, and maybe executives would have never had time to even stumble on. I mean, that's how we even got our start with Salesforce, was one team within Salesforce betting on us and being like, "Let's try this company. It's small, but they want to make a podcast. Let's go for it and partner with them." And just getting that one opportunity to then spread within the company and do a good job and prove yourself. I think that's how a lot of innovation can happen by just letting the teams go and source those cool opportunities or companies to partner with.Mary:And the other thing too, is you have to remember when you're working with agency partners, they have other clients that you learn from. They are bringing you ideas that they've seen possibly be successful with other clients in completely different industries. And so there's a lot of built-in advantage there. There's built in knowledge, there's built in advantage. I also think that they understand our business. We're teaching them over time, our business. And so they're invested in it. They're invested in making sure that we're successful and we're doing the same. I think sometimes when you vertically integrate, the motivations may be different. And there's maybe not necessarily that hunger over time. And so depending on what that situation is like internally depends on how successful that is.Stephanie:Yep. I totally agree. Love it. All right. Well, let's shift over to the lightning round. Lightning round is brought to you by Salesforce Commerce Cloud. This is where I ask a question and you have a minute or less to answer. Are you ready, Mary?Mary:I'm ready.Stephanie:Awesome. All right. So pull out your crystal ball, what one thing will have the biggest impact on e-commerce in the next year?Mary:I think social selling.Stephanie:Yeah? Tell a bit more. What are you thinking?Mary:Well, because it's a new channel. It's getting to the point where we have ways to prove it out. I believe that it's definitely a new area. When I look at statistics in social selling, it's like the last year, I think it's like 57% of the consumers bought something off social office, social channel. I mean, that's a big opportunity as far as I'm concerned.Stephanie:Yeah. That's where I source a lot of everything, by Instagram, TikTok, I'm like, "Oh, cute shirt, cute outfit. That makeup set, you said, that's good? Okay. I trust you." Yeah. I definitely agree on that. What is your favorite Cuisinart product outside of the air fryer? And me, I was like, "I know she's going to say that again."Mary:That is by far my favorite product, but I have several. So we have a product called the griddler which we've had in the line for a really long time. We have a couple of new versions of it. And so that's, now I'm going to go into the pitch, but-Stephanie:Do it. Do [crosstalk].Mary:It's an indoor grill. It has, basically, can take you from breakfast, lunch, and dinner. It has reversible plates. You can make a panini. And the great thing about it as the plates go right in the dishwasher. So you make a meal in minutes and there's little cleanup. So that's another one of my favorite products. And I couldn't start my day without my Cuisinart single-serve coffee maker. We have multiple coffee makers in this house, but don't judge me, I happen to work for a company that makes a lot of great ones, but we use the single-serve one when we're in hurry, but we also use a grind and brew when we want to linger over a pot. So definitely coffee would be, can't start my day without it.Stephanie:Wow. So many products you need to invest in. I don't even know where to start. Great. What is one brand that you watch that helps you stay creative or innovative, or you keep an eye on what they're doing? And it does not have to be in the cookware industry of course, it can be very different.Mary:Keep my eye on a lot of companies. So it's hard to distill down. And I would say, a lot of them are not in, I mean, not that I don't keep track of my competitors, believe me, I do, but they're several. I would say Peloton is one of them just because of, I mean, they've been in the news a lot lately, but that's not my reasons. The community aspect of it, I think that's what the product is really about. It's not really about the physical products. So I think that's really cool. Obviously, Apple, who doesn't keep their eye on Apple. I would also Amazon because they're into everything. There's every day I open the news and I'm like, "What don't they do basically."Mary:So let's say that's a few of them. Then I also keep my eye on a lot of startups, small startups, especially in the food industry right now. I really love what's going on in plant-based food and there're so many food startups out there. I really am very intrigued by the work that they're doing.Stephanie:Yeah. I love that. We just did a whole episode too on why your best ideas can come from looking outside your industry and how that's a lot of innovations happen, especially when you have a similar problem that maybe has already been solved. If you're thinking like, "Oh, I have something around employees in this and how to set it up. And I'm in the food industry. Let me go look at the, I don't know, space industry and see how they think about this or even military or something. How do they do team structures?" And yeah, it was very interesting to think about how other industries can influence creativity and solving problems.Mary:Yeah. The other thing too, what I think about is, there's so much work going on in the plant-based food business. There's so many competitors. The same thing with meal kits. At some point consolidation has to happen. But the other reason I keep my eye on that is, we have to be as people who make appliances, we have to be helping our consumers understand how to actually prepare those foods when they get at home and they're using our equipment and all those types of things. I mean, if you just look at conventional meats versus grass-fed versus organic, they all cook differently. So there's some work that has to be done there to educating the consumer.Mary:So that's another reason why I keep my eye on the food industry. And just food in general, it's changing so fast. And also people have much more, such interest in ethnic foods and discovering new foods. And there's an entire process of what happens to consumers when they travel somewhere and taste something new and try to recreate it at home. So I keep my eye on all those types of things.Stephanie:Yep. That just made me think about something that needs reinvention that maybe you guys can tap into, the microwave. Why does it still have presets that just say potato, popcorn. I'm like, "I don't use any of those. And this is 2021. People make many different things, not just baked potatoes and meat or whatever it has on there." So if you also helps with that.Mary:It's funny because, I'll tell you something about myself. So we have multiple air fryers, there's digital ones, which have a zillion options. I have the, this is going to make me sound analog instead of digital completely, but I actually like the dials because I like to decide myself how it should be cooked. But yeah, so I agree with you though, like, "How many cups of coffee do we need to reheat before we know that's what it is?"Stephanie:Yup. Yup. Man.Mary:Baked potato popcorn.Stephanie:Yep. [crosstalk].Mary:But they're also the most used functions, which is, kind of drives why they're there.Stephanie:Wow. Yeah. Okay. Maybe I'm just not their typical user.Mary:Maybe you're not making enough baked potatoes.Stephanie:I know. I guess, I need to get on that. What am I doing with my life? All right. And the last question, what one thing do you not understand today that you wish you did?Mary:Oh, Bitcoin, please.Stephanie:Yeah. I've had so many people say that on the show.Mary:Cryptocurrency, I don't get it in. And after watching Elon Musk on Saturday Night Live, I still don't know anything.Stephanie:Man, I think this is just going to push me to start a crypto podcast because so many e-commerce guests have said that and trying figure it out and how it's going to impact their work or their point of sale systems or payments or any of that, or even supply chain, which I think it's going to have a huge impact on.Mary:Yeah. It's interesting. Because I think I'm smarter than the average doc and I just cannot follow that at all. It's not that I haven't tried, but I definitely need an education there and I'd appreciate if you help me with that.Stephanie:All right. I will find a sponsor. Anyone come on in and sponsor the show, I'll get it going and Mary is going to be my first guest to ask all the questions.Mary:I'm there.Stephanie:Well, all right, Mary. Well, thank you so much for coming on the show. It's been a pleasure chatting. Where can people find out more about you and Cuisinart?Mary:So you can find out more about Cuisinart at cuisinart.com. So follow us on all the social channels under Cuisinart, except for on TikTok, it's cuisinart_official, which we're just starting that right now. So we're testing the waters as they say.Stephanie:It's going to be air frying all the things on there I bet. That'll do.Mary:Exactly.Stephanie:That'll be hot on that channel.Mary:Just started. So we're just getting our feet wet. And then you can follow me on LinkedIn, it's Mary Rodgers. Easy to find.Stephanie:Perfect. Thank you so much.Mary:Thank you. It's great being with you today. It was a lot of fun.Stephanie:Same, and I agree.
If you look on Twitter or do a quick Google search, you'll find a ton of chatter about the foolproof DTC playbook. Everyone has ideas about the surefire ways that young DTC brands should be setting themselves up for success. Alex Kubo is here to tell you that those playbooks aren't as written in stone as you might think. Alex is the VP of ecommerce and digital marketing at Burrow, a DTC furniture brand, and on this episode of Up Next in Commerce, he explained how and why the Burrow team threw out the playbook when certain aspects of it fell flat. For example, Alex talks about the lessons they learned about the signals that pricing sends, and why it's critical to put the right price on your product to attract the right customer even if that means pricing higher than the playbook says. Alex also dives into what it means to actually be customer centric and how Burrow stays in constant communication with customers. Plus, we discuss why marketing toward buying events or using a spray and pray strategy across a dozen channels is about as useful as setting your money on fire. Enjoy this episode!Main Takeaways:Sending The Right Signals: How you price your product or service is one of the most significant ways you signal to customers who you are as a brand and what value you bring. If you price too low, you risk being lumped in with brands that don't necessarily fit with the type of products or value you bring to the table.More Than Words: Saying you are customer-centric and actually being customer-centric are two very different things. To be truly customer-centric requires regularly talking to and learning from your customers and then building experiences and products based on those conversations. You can't just assume you know what customers want, you have to do the work to find out.A Horse of a Different Color: There are best practices and guidelines that many companies follow to get themselves off the ground. Sometimes those playbooks work, but in other cases, you have to toss out what everyone says is the right strategy and go in a new direction. Whether that's in your social strategy, your pricing, or how you're getting feedback from customers, don't be afraid to buck tradition and do something different.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Welcome to Up Next In Commerce. I'm your host Stephanie Postles, CEO at mission.org. Today on the show, we have Alex Kubo joining us, who currently serves as the VP of E-Commerce and Digital Marketing at Burrow. Alex, welcome.Alex:Thanks, Stephanie. Excited to be here.Stephanie:Yeah, I'm very excited to have you here. It was cool reading a bit about Burrow's background and starting at Y Combinator, and I was thinking it might be fun to start there, back in 2016. What did it look like starting the company, and then we can get into today?Alex:Totally. So, I was fortunate that I actually met the two co-founders of Burrow while were on the same business school program in Philadelphia. And back in the fall of 2015, actually, Kabeer and Stephen, the two co-founders and my classmates were both furnishing their apartments as they moved into Philadelphia for the program, and they had two very distinct but related experiences. Kabeer purchased a sofa from West Elm in Philly, and it wasn't going to arrive for about 12 to 16 weeks, which I think, nowadays, people are pretty used to seeing those timelines, but Originally, it was like, "Whoa, this is not Amazon." And so, Kabeer actually used the cart, the dolly in his apartment building and rolled it to West Elm, and picked up a floor model and brought it home, because the lead time was going to be longer than his first semester, so obviously, that was not going to be a great experience.Alex:Stephen went the classic IKEA route, right, where you don't come in to grad school with a ton of money and need to furnish your space quickly. And so he did that, and then ultimately, it's a waste down the road, right? IKEA furniture, you can't move because of the quality of the materials and that sort of thing.Stephanie:[crosstalk]. Yeah.Alex:Yeah. So, the question ultimately became, why can't you have that higher end quality that you might find at a West Elm, or Pottery Barn, or Crate and Barrel, but the convenience, the modern day conveniences that Amazon has made the default expectation of consumers, so fast, and free shipping, and easy delivery process, and be able to modularize that design so that you can set it up and not have to deal with like the IKEA hex key or any of these really cumbersome assembly processes? And so, that concept was born. And out of that came a series of product innovation that ultimately, Stephen and Kabeer got into Y Combinator with just a pitch deck and no product and used that accelerator to develop the product, to prototype the product, and ship it.Alex:A funny little anecdote is that from the time they incorporated the company to the time they shipped their first product was shorter than the period of time that West Elm quoted Kabeer to ship his first couch.Stephanie:Oh, wow. That's great.Alex:Yeah.Stephanie:And what were you doing when they were going through Y Combinator?Alex:I was actually working on my own concept in the health and fitness space and ended up calling time on it right towards the end of the summer because of a number of challenges that I was having on my end, and joined up with Stephen and Kabeer to help build out the demand side of the business. And I had a relatively intimate knowledge of the business and where they were at because we were in all the same classes working on our own businesses. And I had helped them tangentially with sourcing components during our first year of the program, because I have a background in mechanical engineering and they didn't have any background in physical hardware. And so, there was already the groundwork for relationship. And then I was trying to move my own discipline into more of a consumer facing and ground level marketing and product marketing role, so it actually made a lot of sense.Alex:So, we set it up as a brief relationship to make sure that the working relationship was there, which it turned out very quickly, it was. So, I have been tasked or had been tasked with basically just building demand and ran with it since.Stephanie:So, since then, what does the world look like now compared to when you started and you were building up demand? I mean, I'm sure you guys were trying out Facebook and all the traditional platforms that everyone's like, "Every brand should be on Instagram and Facebook, and if you're not here, where are you?" What did it look like then and now?Alex:So, now it's a much more disciplined and much more properly positioned business than it was in the beginning. Two critical mistakes that were good healthy mistakes to make in the early days were, number one, brand positioning and product positioning. We had this idea in our head that... and sort of the classic Warby Parker pricing story of like, they wanted to price it $45, but their advisors and professors advised them not to do that because it would signal the wrong value to the customer. We had a similar experience where, for some reason in our heads, we had to price our couch under $1,000. And we made that decision because we wanted to be hyper competitive on price and make it the default, obvious solution.Alex:The problem that we failed to acknowledge is that consumers nowadays have very limited time to understand the differences and nuances between products. They're not stupid, they're not lazy, but they do have very limited time. And so, you have to be very clear and explicit with them, and part of that is signaling. And one of the most powerful parts of marketing that I think is most often overlooked is a focus on pricing and what that does from a positioning standpoint.Alex:When a lot of shoppers were seeing our product under $1,000 and the fact that it shipped in boxes, which we were very forward with, because we focus so much on the attributes of the product and less on the experience around it, which is another step in our evolution, that people immediately equated those two things, low price and ships in boxes, with a more expensive version of IKEA. So, then it was us talking to IKEA shoppers, and you're not going to convince an IKEA shopper to spend another 300, $400 on a sofa, right? What you need to do is talk to the West Elm shopper, the Pottery Barn shopper, the Crate and Barrel shopper.Alex:So, we actually, for a number reasons, increased prices in late 2017, about half a year after we launched.Stephanie:How much did you increase them by?Alex:Originally, the sofa was priced at 950. By the way, much different cogs, profile as well, at that point. We increased the price to 1,095 to start. So, it was a pretty meaningful difference on a percentage basis, and especially when you talk about margins.Alex:Interestingly enough, everything you learned in microeconomics about the relationship with the supply and demand curves went out the window, because we increased the price and demand shot through the roof.Stephanie:Wow. Did you get it in front of new people? What else were you doing to get it-Alex:I mean, we were doing a lot of the same things in terms of building full funnel architecture on paid social and paid search and that sort of thing, and again, applying a lot of those early D2C playbook type approaches, which ultimately turned out to not be the best approach for us. But nothing changed substantially from a marketing perspective. We were still reaching a lot of the same people, it's just that we were now signaling to those people that we belonged in the comparison set with a higher quality piece of furniture. That helps also, because a lot of our value props, it's much easier to convince somebody who has shopped at one of these higher end brands and had to wait super long or had to go to a showroom and deal with a frustrating shopping experience with this overbearing sales associate, pay for shipping, and ultimately, have to be home to get a piece of furniture delivered, and either take a day off from work. Again, much different world back then than it was today.Alex:But it's much easier to talk to those kinds of people who've experienced those pain points and tell them, "I'm going to take all of that pain away," than it is to talk to somebody who's never experienced those pain points and doesn't need the higher quality piece of furniture, again, the IKEA shopper, and talk to them about all these future pain points that they've never experienced but that we can help them avoid. That's maybe one of the biggest lessons learned, is that people do not think much about the future. They're often very, very focused on the present. And so, as much as you want to talk about why you should go to the doctor every year, why should you should go to the dentist every six months, it's like, people are not going to react until they have a problem.Alex:So, we've experimented a bunch with what is the leading value prop. So, we talked to consumers, and one of the ones that we talked about very early was this concept of modularity and how, when you move into your next apartment, you can just purchase another seat instead of buying a whole new sofa to accommodate the new space, or rearrange the existing configuration that you have to fit the new space requirements. Problem is, people are not thinking about that. They don't really care. They can't think that far in advance of two to three to four years down the road when moving into the next apartment. And so, we've deprioritized that in terms of communication and lead with other things that are more immediate, like fast and free shipping.Stephanie:Yeah. Got it. So, you're mentioning earlier that the D2C playbook didn't work for you guys, where now, even these days, you can search that and you'll find a bunch of the playbooks and people are still saying like, "This is what you need to do to be successful." What were some other things that you did back then that you completely reversed and you were like, "This doesn't work for us"?Alex:Yeah. So, I think, first, was not acknowledging how complex and lengthy the shopping journey is for a piece of furniture online. Obviously, it's a big investment, it's also mutually exclusive with something else, your home, right? Let alone the high price, you're not going to just buy another couch when you have an existing one in your home, right? You need to think about getting that out or you have to do it right at the right moment with a moving event or something like that.Alex:So, the first thing that we had to realize is that what we can't do is architect our funnel around existing attribution technology or just rely on optimizing towards purchase events in digital channels. What we had to do is to look upstream and find correlations and causation between different upstream, midstream, and bottom stream events to really architect a healthy full funnel. And so, most of our campaigns are not architected towards purchase events, they're architected towards or optimized towards something more upstream.Stephanie:[crosstalk] for a couple examples.Alex:Yeah. I guess one interesting one that we've learned over time is there's a pretty clear correlation between add to cart and purchase, and the cart abandonment rate is relatively steady. We do things over time, obviously, to improve that, but it's not something that fluctuates wildly over time. And so, one of the things we can do is just optimize towards an add to cart versus a purchase.Alex:The other benefit of that is it often can happen in the first session. So, when you see a lot of the privacy restrictions right now and a lot of the issues with cookies going away and that sort of thing, it helps us. We've actually always been architected to bear that burden a little bit better than some of our other D2C peers.Alex:And then the other thing, besides the purchase journey, was also that we were just doing way too many things at once. We had, and we still have today, a very lean team. The difference between now and then is that back then, we thought the best approach was to spray as wide as we possibly could and activate 10 to 15 channels with me managing all of them, by the way, and not doing a good job.Stephanie:It sounds very chaotic and not fun.Alex:Yeah. Not at all, not at all. And only until we really peeled back and just focused on a handful of things and did them really, really well, that's when we actually started churning results, but more importantly, honestly, that's when we started actually learning what was working. Because previously, we were just spending a lot of money, we were generating sales, but we didn't really have a clear idea of where they were coming from, again, because the purchase journey was so complex, right? It wasn't a problem that we could solve by just putting an attribution layer in somewhere. We had to really hyper focus on one or two things and do them really, really well.Alex:The concept of growth in the past has generally been focused on the top line. And what that means, often, for a lot of companies, is to just go into as many different channels and try to tap into as many different demographics as you possibly can and then find out what's working and what's not working. I think the issue is that the broader investment community has wisened up to that, right, and they're holding us more accountable on a unit economics and customer economics level, versus just month over month top line growth, which in reality, it's just a vanity metric, right?Alex:So, it is more favorable to take a more disciplined approach, albeit potentially slower top line growth, to really uncover those median sites that you can actually build a solid foundation on and grow a real, scalable, profitable company on versus just something that's just, scaling wildly at the top one but in reality it's just lighting money on fire.Stephanie:So, for a higher priced product like Burrow and a longer buying cycle, what platforms would you advise other brands to look at and optimize for and which ones would you pull back from?Alex:Yeah. So, I think if you acknowledge that it is, there are a lot of things that people have to learn about the product, a lot of things that people have to get comfortable with and confident in the purchase. You think that a lot of these shorter form mediums, like paid social, paid search, right? It's just a quick second and a half interaction with an ad, they're not going to be as effective for a product like ours, and that's true. What we have indexed up on are things that are more storytelling mediums. So, the earliest insight into this was we partnered with a small podcast in late 2017, and it's sort of one of those micro ones, it's not on a network, and just talks about fantasy football. And we just got introduced to the gentleman that runs it, and did a small test, and the results were incredible.Alex:Part of what we've learned over time from that point, rapidly scaled the podcast program for us is that it's highly dependent on the host, and the reason that it's highly dependent on a host is because the efficacy of that channel comes from the quality of the storytelling. And that is really what benefits our brand, is that if we go and we send a podcast host a product and they have the same amazing experience that our customers have, they can talk about it in a much more authentic way, but also, a much more individual way. We've actually matured to not providing very detailed scripts to a lot of our podcasts hosts and just telling them to talk about what has been most exciting for you, and that really brings out the energy in the advocacy for the brand from the host. So, I'd say it's really about focusing on storytelling mediums. So, I lumped other video, long form video into that as well. A little bit less of authenticity, but also helps communicate a lot of these little value props that add up to the major value proposition.Stephanie:So, the other thing that comes to mind is branded content. I mean, I'm thinking about something like Formula One where now the results are out, everyone knows it worked really well for them. It was very, I would think, pretty organic, didn't feel like it was just a brand push. How are you guys thinking about other kinds of content like this?Alex:I don't know if we're at the stage yet where we can start thinking about that sort of thing. I think that Formula One is a great example of taking two powerhouses and linking them together where the sum is greater than or the whole is greater than the some of the parts. So, we're thinking a little bit less about something like that and creating more on a micro scale, I would say, brand and content.Alex:So, when you talk about something like the influencer arena, I am probably the biggest advocate against using influencers in the context that they are used today. And first of all, just to clarify, a true influencer is not somebody that says, "I'm an influencer" on their Instagram profile description, right? A true influencer is somebody that can speak to a community and elicit a response, and often, within a specific category, right? So, I'm not going to give a beauty "influencer" a furniture product and expect him or her to have an outsized impact on the sales.Stephanie:Stephanie:So, you'd focus on the niche influencer who might only have 1,500 followers or something, which is something I think I talked about early on this show, of going through the comments of Instagrammers and seeing, are the people in there asking, "Where can I buy that? Where did you get that from?" Or are they just like, "That's great. Cool. I love that." What kind of engagement are you getting will show if that person has influential power over their community or not.Alex:Totally, totally. And obviously, it's going to vary by a vertical too. This is sort of an extreme example, right? Again, going back to the very considered purchase, even our ability to measure the impact of that is going to be super limited. So, we've actually leaned into the influencer community for, more so is, partnering with actually photography influencers. One of the bottlenecks and problems with our vertical is that our products are very large and our photo shoots and video shoots require massive studios and massive crews that are very, very expensive. Meanwhile, all of these people out there that can already take great pictures and already have really interesting homes need furniture. And so, we can often partner with them in a much more economically scalable way to get a huge diversity and huge volume of content created that can showcase different styles, different aesthetics, different home types, and different personalities, and just build this library of content instead of having to book homes ourselves and go through the whole production process.Alex:So, we've actually been doing that for a while just purely based on economic reasons. But it's interesting to see that now, I think there's going to be a massive shift towards organic for a number of other reasons. When you talk about a lot of the privacy regulations that are going on right now, over the last 10 years, the control of the voice or the conversation has shifted towards the consumer and towards the user. You see like case examples of this with like GameStop, for example. The retail investor just had a massive impact on the market from such a small player, right? Because the control of the conversation momentum is shifting away from the brands that have the big budgets and towards the customers that have the voice, the authentic following.Stephanie:That's the influencer of the year right there.Alex:Yeah, totally.Stephanie:And Reddit. And that's probably where all the other influencers are, an area that I haven't even thought to go, but we've had guests come on previously where Reddit is how they figured out how to build their business, which I haven't even thought to go there. Alex:Totally, totally. I mean, it makes total sense, right? It's experts that are talking because they're passionate about what they're talking about, right, not because they have a vested interest or they are trying to make money off of it, then that's where you get that authentic content from and the actual truth.Stephanie:So, how do you go about incentivizing that or structuring it so it can come in? Because I'm sure a lot of brands are like, "I want my customers to talk about me and take pictures and do all the things," and then they just sit there and nothing comes in. So, what are you doing behind the scenes to make that happen?Alex:So, it's less about focusing so much effort on trying to elicit that response just by trying to elicit it and more about really focusing on that product innovation and that experience that will naturally have that effect on people, right? You don't want somebody to talk about your product in a positive way because you're paying them to talk about it in a positive way, you want them to really advocate, because that means that not only are they talking on the channel that you want them to talk about it, they're also having side conversations. And when people come over to their homes and they're asking, "Wow, where did you get that beautiful sofa from?" They are talking not just about, "Oh, I got it from Burrow," they're also saying like, "And it happens to have these stain resistant fabrics, and it has all of these great other materials, and it was modular, and it was super easy to get it delivered and get it set up." And that's what you really want to go off of.Alex:So, I would say the biggest focus should be on nailing that product innovation and nailing that customer experience, and that's how you can count on that customer conversation to be generated rather than trying to chase down your customers and get them to talk about it in a less authentic way.Stephanie:Yeah, I agree. I think that the days when people on Amazon are like, "I got paid for this review," or something, those will be gone very soon, because I don't know about you, but every time I go through a threat and I see that, I'm like, "Don't trust you, don't trust you." I just want to see the normal person who's reviewing it at their own goodwill, or not, maybe they're mad, but I want that. I don't want someone saying, "I got a free product for this review." That just seems like those days are gone.Alex:Yeah, totally, totally.Stephanie:So, the other thing I want to talk about is product development. I saw that your co-founder and CEO said, "Every single product we've ever launched has exceeded expectations and projections, and that's a testament to our customer-centric research-driven design process," which I want to dive into that and hear. I'm sure many brands are like, "I want every single product of mine to be a success, and I want to expand my skews." So, how do you guys go about designing and crafting new products?Alex:Well, I think one thing that we should clear up is the concept of customer centricity is used so broadly and inauthentically, I think. A lot of brands will claim customer centricity and they'll think that they're being customer centric because that's who their customer is and they just need to make money off of them, and so they'll say that they're thinking about all their needs. The problem is they're not actually talking to the customers, they're assuming on behalf of the customers that they know what that customer needs. Or they're just testing messaging, which is fine. That's been the traditional approach of, "Okay, if I play up this feature or this benefit versus this feature or this benefit, and this one does better, that's what the customer must want," right? But it almost becomes a little bit of a self-fulfilling prophecy there.Alex:We take it to a much deeper level, not just with our customer community but also our lead community, all of our email subscribers that have yet to join and make an actual purchase with us, and actually going to them and asking them very specific and lengthy questions. I remember the first time we sent out a customer survey about one of the next products that we were going to launch and just wanted to get their input on like, "Is this the right product?" Number one, and B, "What are those little things that really bother you about this product?" And did a ton of just open ended response analysis based on that.Alex:The biggest surprise for me from that was the response rate. For a quiz or rather survey that took probably a solid 10 to 15 minutes of someone's time to go through and really complete in depth, which they did, the response rate was astounding. And that opened our eyes to, "Wow, this needs to become a regular occurrence within our work stream."Stephanie:How quickly were you sending this to them? Was it a week after they got their product and are trying to set it up, or what did that look like?Alex:Well, there's a couple different ones. So, what we have is a couple different touch points that are automated or triggered based on somebody actually making their first purchase with us. So, we had, obviously, a post purchase survey right away, which I think is one of the most underappreciated and can be most impactful survey points that people do, or brands do, rather. We also have an NPS survey, which going back to how do you elicit a response from customers and activate customers, NPS is going to be your biggest indicator of how much of that is happening in the background. And that is actually backed up by an element on the post purchase survey where we ask, "Were you were referred by a friend? Does that friend own Burrow furniture, or do they not, or do not know?" And that can also give us a really solid indication of the impact.Alex:So, beyond the triggered survey points, we also do intermittent studies, and it's almost on a monthly cadence now, of either focuses on new categories in general, or we've already identified the category, we've already identified the specific product and we're trying to nail down colors, color combinations, finishes, specific features, doing conjoint analyses on like, what is most important to this set of consumer? I mean, we've really taken it to a super, super deep level.Stephanie:Have there been any products that you launch based off consumer feedback or maybe early launches where it's like, "Oh, they led us astray with that one"? Because I'd be like, "I want a fluorescent pink couch." And then I'd be like, "Oh, I had a little too much wine that night. Sorry about that."Alex:Yeah. Fortunately, we're pretty good at statistics and we can identify outliers and not get swayed by them too much. There actually have not been. And I think it speaks volumes for this concept of authentic customer centricity where... and you can also cross-compare between the customer set and the subscriber set, right? The subscribers are a great audience because they have not purchased anything from you, or at least the subscribers that are not customers, and there's a reason why, right? Versus the customers, they did find something that you offered already and they've already bought into the brand, and they're responding to you because they're still engaged. And so, that's one set of needs that you need to fulfill.Alex:And then there's the other set of needs, and oftentimes, there's a good amount of overlap, which is great for us, and oftentimes, there's not, and that's when we need to make choices around what does that offering look like and who are we really chasing with that?Stephanie:Yep. The other thing I think you mentioned in the past was around how you start thinking about zoning and mapping out what else a person needs in their room, which means like, "Oh, brilliant, okay, if someone got a couch, a little swivel chair, and obviously, they need pillows." And I want to hear, did that method work, and how have you expanded that since you first started trying it I think maybe a year and a half ago or so?Alex:It did, totally. I mean, you take one concrete example of this is with the advent of coffee tables for us. We first launched the sofa and then we launched our first line of coffee tables, and those were specifically designed dimensionally to work best with the sofa styles that were selling the most volumetrically. So, we knew that there was a high rate of match, right, between them. It wasn't like we were designing for something that we were only selling like 5% of our assortment or something like that.Alex:Where that took another level is in 2019, we launched the corner sectional, and then arrangements and configurations started getting a lot more varied and a lot more... opened up actually, additional demographics as well, with more suburban, satellite city homes with larger room spans. And that opened up a new category, and so what we had to do is to figure out, "Okay, well, if you have a five-seat corner sectional, none of our coffee tables really make sense for that. And so, how do we create a coffee table that works perfectly in that configuration for that customer specifically?" So, that's when you saw in late 2020, we released our Kettle and Signal collections, which are more of a round geometry versus a rectangular geometry. And that happens to work really well with things like a Double Chaise Long King Sofa, where the chaise is wrapped nicely around the round coffee table, or the corner sectional, it creates a really nice conversation pit type feeling.Alex:So, it is very much about understanding how our pieces interact. And then the next level that is, what are the types of rooms that people are using it in? What are the actual dimensions of those rooms? And what logically, could somebody need the most, given that room design and size?Stephanie:It seems like a lot of brands are missing that right now, because oftentimes, I mean, whether it's furniture or a lot of other things, I'm like, "Where is that matching dresser set? Or where is the pillow that goes with that?" And it feels like having to go around and look in different places and trying to find it myself, I'm like, "Why am I doing the work? I just want a kit which is like, 'Here's all the five things that match together.'" But why is that so hard? I don't get why can't brands do that?Alex:I think one of the biggest examples of this is that company brand list that skyrocketed, but they were launching things in such unrelated categories that there was no bond between them. And companies nowadays need to think a lot more about lifetime value than they had to necessarily, in the past. Acquisition cost is growing, and they can no longer just rely on first purchase profitability in order to sustainably scale their business, and they need to think about building a relationship with the customer. And that often comes from creating relationship and being the default brand or site to go back to when they may have that next need and finding that perfect accompanying piece, right? Versus just like you buy cleaning detergent from the company, and you come back and, oh, they're offering soccer balls or something.Stephanie:Pillows.Alex:Yeah, it's like, "Okay, well, that doesn't make sense."Stephanie:Yeah. Which makes me think, I mean, it seems like the world is headed towards a more curated world right now. Maybe back in the day, I would go to a Wayfair or something like that and I'd be like, "Cool, I'm fine with scrolling, scrolling," five years later, still scrolling and looking for what I want. It doesn't seem like consumers want that anymore. So, how do you see the consumer journey and preference adjusting now where maybe a couple years ago, that would be totally fine?Alex:Yeah. I think it's almost a byproduct of the ease of standing up a company nowadays. It is exponentially easier to start a company, a direct to consumer company than it was 20, 30, 40 years ago. So, because of that, the market has just blown up in terms of the number of companies. And so, the paralysis of choice has shifted from like going to an old school Sears or Macy's and just having like a million different options, or as you put it, like a Wayfair, and just tens of millions of options, to now having to build a relationship with a brand and trust that that brand is making the right decisions. And so, that's why we offer a very select assortment of fabric colors, leg finishes, arm styles. In reality, we can house tens of component skews and offer tens of thousands of combinations to the customer, but what's ultimately the most important thing is that we do it in a way that is still a very simple and clean experience for the customer so that they get that sense of they're creating their own product, but not to the extent of being overwhelmed.Alex:I think of myself on old school furniture sites and staring at the screen from two inches away trying to figure out the difference between this gray and that gray, and I'm like... and then you request swatches from them and they come 10 weeks later.Stephanie:Yeah. I've recently been through that experience. It's not great.Alex:Yeah. No, it's not fun.Stephanie:They arrived and I'm like, "What was I trying to buy, again?" [crosstalk]. I mean, it seems like you guys could also have a very localized approach where, like you mentioned earlier, if someone is looking from a very suburban area, like my hometown in Maryland, where my expectations there would have probably been to have a huge wraparound couch, I've got this big living room, versus being in San Francisco or Austin, where now it's like a little bit more limited space, and what can I fit in these small areas? [crosstalk] think about that?Alex:I mean, the first step there that we're taking, it's more from a content driven approach. So, that goes back or loops back to the way that we're treating influencers and leaning into the photography community and the different styles and aesthetics that they have. Because what we are creating are based products. They are beautiful but they don't belong in an architectural [inaudible] editor's home, right? They're not the one-off piece that you design and custom build for 15 grand or something.Alex:And what's beautiful about that is that they stand up to any environment that you're putting them in, whether it's a very eclectic like Austin ranch style home, or the fourth floor walk up apartment in New York, or a more sprawling home in Houston or another geography like that. And leaning in with more of that stylistic approach than necessarily sub-segmenting, "Oh, we're only going to show love seats to this geography, or we're only going to show these massive sprawling corner sectionals to this other geography," because people still have varying needs, a lot of people have multiple rooms. So, we don't want to limit, necessarily, the assortment, but we are trying to diversify constantly the styles and aesthetics that our products are showcased in.Stephanie:Got it. Yeah, that makes sense. So, for the last big point, I wanted to talk about the industry as a whole, like the D2C industry, commerce, what kind of things are you seeing or preparing for behind the scenes for what's to come?Alex:I mean, we could talk about the elephant in the room, which is-Stephanie:Let's talk about it. Yeah, let's do it. I haven't really talked too much about that, because it's been so up in the air, and when's it going to go through? It's more official now, so let's do it.Alex:Oh, yeah, it's official. This is a tough thing, and I think it's a reckoning for a lot of these companies, again, where it's been so easy to start a company and just go on Facebook, and you'll generate some sales, and go to a VC and you'll show 100% month over month growth, and they'll throw a bunch of cash at you. That's changing, and I'm thankful for it as much as I curse the fact that we don't have this GPS anymore, I'm very thankful that we don't, because it's forcing us to mature as marketers. And we're fortunate also that we've had to embrace this appreciation for marketing 101 and really lean into principles and not just trust what the ad platform are telling us, because it's a whole shopping journey.Alex:So, we've built a very healthy, full funnel approach proactively, even without any of this talk about these privacy regulations. That has helped us create something that can stand up in the face of this. There are a lot of companies that have not done that, they've not invested in really understanding marketing 101 and how to build a healthy full funnel without having that very granular level of insight or having automatic triggers in their campaigns and stuff. So, I think that is the most important thing, is like there is a day of reckoning for marketers everywhere in the D2C space to take a step back and really appreciate the principles of marketing and evaluate your program architecture overall and make sure that it's in a healthy state, and not just because your add to cart rates or your conversion rates are really high from this one campaign in this one ad unit, but really, overall, how is your program operating? Where are the weak points and how can you supplement those?Stephanie:Yeah. So, if you were starting over day one today, what kind of things would you look at? What metrics would you look at? What kind of things would you put in place to start building up that healthy funnel?Alex:Yeah. I think we would look at... I'm trying to think if I didn't have all the information that I have today, but I think what you would look at is the abandonment rate through the funnel, right? Of the people who click through to your site, how many of them end up viewing a product? Of those people, how many of them end up adding it? Of those people, how many of them end up actually proceeding to step one of checkout, step two, step three, step four? And find out what that makeup looks like.Alex:And obviously, you're going to spend a lot of time on conversion rate optimization and trying to improve the outputs of each step of that funnel. But that paints a picture of, okay, how broad do you have to invest at the top of that funnel if your ultimate target at the bottom of the funnel is X? And what does that reach look like? And what are the best mediums to do that to actually elicit a response and get people onto your site or into your store or signing up for whatever service you provide? So, that, I think, is what I would take as step one.Alex:The other one is, I would just consider, for the vertical that you're in and the product that you're trying to sell, how much of a story do you need to tell? And that will help inform how much you will need to invest in more storytelling mediums than more immediate click to buy type mediums. Also, how visual is your product? That will tell you how much you have to be content driven versus leaning into things like search or audio formats or anything like that. And that can really help govern your channel choices.Alex:And then the last thing is just, don't fall into the trap of doing too many things at once. There's always something to be said to acknowledging the resources that you have and trying to build a architecture that is best for that set of resources, not just the one that happens to be doing really well for the other portfolio company that your VC backer is constantly in your ear about, you have to focus on what is going to work for your company, your vertical, your customers specifically.Stephanie:Yep, yeah, I love all that. Is there or are there any tools right now that you're very excited about that are either new or just time tested, you're like, "We're going to keep using these forever because they do wonders for our marketing efforts"?Alex:I think a lot of it is less about tools and more about information sources. So, we've partnered with a number of different companies over time to do things like customer enrichment and really understand our customers to a deeper level, again, going back to that concept of customer centricity, not just talking to them directly, but also learning much, much more about them. And I think one of the biggest traps that a lot of companies fall into is they think of their customer as an average customer, and the problem is they're failing to acknowledge that customers are not one monotonous group, they are a system of clusters and cohorts. And what you really have to do is understand what is unique and important about each of these clusters and then create a messaging architecture, channel architecture, product offering that really speaks to each of those clusters individually.Alex:So, from a tools perspective, it's more about these data enrichment, customer data enrichment type platforms, and then using those to create these clusters and cohorts and really understand those customers. Again, for us, an attribution platform, not super helpful because of the complexity and both mix of offline and online activity that it takes to get to the purchase point. Much more about really understanding the customer and then applying a marketing 101 approach to it.Stephanie:Cool. Yeah, that's great. All right. Well, let's shift over to the lightning round. The lightning round is brought to you by our friends at Salesforce Commerce Cloud. This is where I ask you a question and you have a minute or less to answer.Alex:Oh, boy.Stephanie:Ready, Alex?Alex:Sure.Stephanie:Oh, boy. What's one thing you don't understand today that you wish you did?Alex:Shoot. Where do I start? I think I would like to understand more about the global supply chain. I think over the last six months to a year maybe, we've seen, very intimately, the impacts of a broken or strained supply chain, and I think that there's a huge opportunity for D2C companies to innovate on the supply chain side. We focus so much on how do we innovate on the customer side that we focus so much less on the supply side of the business. So, I think that is where... and it will become increasingly important for marketers and supply ops to be speaking and working very much hand in hand to grow a company together. So, I do wish I had more of that background.Stephanie:Yeah, that's great. And you guys just raised around, and I think that money, a part of it, was to focus on international supply chain effort, right? Figuring that out better.Alex:Yes, totally.Stephanie:So, you're already right in the right spot, the right time. You'll have to let everyone else know the insight. You have to come back and tell us what you learn next year.Alex:Yes, definitely.Stephanie:What's up next on your reading list or podcast list?Alex:There's actually a couple books I think that I want to reread. I'm one of those weird people that really likes to read technical books, and so there's a couple of conversations we're having right now about pricing in this book called Power Pricing that I love to read. There's also one by a gentleman named Douglas Holt called Cultural Strategy that I think is one of the most foundational and important books, especially for the world today. And again, how the customer controls the conversation, and understanding how to position your company and your messaging around cultural movements and ride momentum versus trying to create that momentum yourself as you have in the past. The last one is Shoe Dog, actually.Stephanie:Yes, such a good book.Alex:Amazing book. This would now be, I think, my third time reading it, but it is a way to, I think... A lot of people have been talking about languishing right now and the fact that we've been in this environment for so long and we're yearning for that personal interaction, and so tired of being in the sedentary and fixed on a digital screen environment. And I think Shoe Dog can help reignite a lot of that passion, right? Because it's like, "Wow, this multi-billion dollar company started at such a microscopic level." And it really helps you understand the power and the capability you have as an individual to create something like that and can help really reignite that passion.Stephanie:Yeah, that's one of my favorite books. Actually, we have a podcast called The Story that tells the unknown backstory of people who change the world, and we highlighted him in one of the episodes because we were like, "The story is too good not to tell, and tell, and tell until everyone hears it, and gets motivated and starts their thing today."Alex:Yeah, totally.Stephanie:That's awesome. I feel like they need a movie out or something. Do they have one?Alex:I'm sure there will be. I'm sure there will be.Stephanie:There has to be one. Too good of a story not to. What's one thing you're secretly curious about? [crosstalk].Alex:TikTok, I think.Stephanie:Are you all on there?Alex:We are not. From a demographic perspective, in the past, I would say a year and a half, it hasn't made sense. The program is continuing to grow, the demographic adoption is continuing to expand, and so I am interested in what it looks like going forward. I think it is also a challenging medium for a lot of brands that are really attached to high production quality content, because what scales the best on that platform is very lo-fi content, very organic and authentic content. And it creates this shift for a lot of companies in the way that they think about creative. So, I'm curious in that we are actively learning about our potential approach to that channel, but also curious about how does that platform and program evolve over time. I've not heard great things about the ad platform that they've built so far, which is partially why we've been hesitant to really go after the channel, but that will evolve. They will crack that code. And what that looks like, I don't know, but I'm certainly curious.Stephanie:Yeah. We've definitely heard 50-50 on TikTok, some brands saying it works wonders, but they're the ones creating their own content, maybe not an ad partner programs. I also think from a consumer standpoint, how it's going to evolve, because at least me personally, I think I got signed out and I couldn't remember my password-Alex:Oh, no.Stephanie:... and I just never signed back in. I'm like, "I'm not sure I really like it then, or maybe I know that just scrolling is not good for me."Alex:Yeah. That was me with Clubhouse, actually.Stephanie:Oh, same.Alex:I loved Clubhouse for the first seven days and was on it constantly and I have not been back on it for [crosstalk].Stephanie:Yeah. I think it got crowded. I mean, now it's just so busy, so many people talking about so many things, it didn't feel curated. I started feeling like that to me too where it was 50-50 of like, "I like these videos, and next nine, I don't like." I think there has to be curation to keep at least us involved, it sounds like.Alex:Yeah, totally. I mean, honestly, that's what happened with the podcast world too, right? It became everybody launched their own podcast, and then there's so much content. The biggest problem with podcasts now is discovery. The only way you learn about what to listen to is through your friends.Stephanie:Yeah.Alex:And so, that concept of discovery is such a challenge for podcasts right now, and I think that's what Clubhouse is going through at 1,000 times faster through the learning cycle.Stephanie:Yeah. I think the next couple of years will be interesting, because I mean, they've been talking about discovery issues back to even when I worked at Google, figuring out Google podcasts, and that was an issue back in 2017. So, why hasn't this been solved yet? It should be so much easier.Alex:Yeah.Stephanie:All right. Well, Alex, it's been awesome having you on the show, such a fun conversation. Where can people find out more about you and Burrow?Alex:Burrow.com would be the easiest place.Stephanie:What about you? Are you on LinkedIn? What if people want to talk to you?Alex:I am. LinkedIn. Alex Kubo. I'm not sure if you can actually search me and find me, but I'm sure you could.Stephanie:I'll find you. Don't worry. All right. Thanks so much, Alex.Alex:Thank you so much, Stephanie.
There are very few industries that are growing as fast as the cannabis industry, which saw about $20 billion in sales in 2020, and that number is expected to double in the next five years. With that much potential profit and opportunity available, getting into the cannabis game is something that a lot of folks are starting to jump into. But as with any other industry, there is more to it than just the product itself. Manufacturing, distribution, expansion and regulation all play a role.Liz Wald has experience in all of these areas, and she is putting them to use as the Chief Strategy and Digital Officer for Good Earth Organics. Liz has a long and impressive history in the digital world, having gotten her start at places like AOL, Etsy, and Indiegogo. On this episode of Up Next in Commerce, she guides us through all of it, including the trials and tribulations of turning an ecommerce marketplace such as Etsy into an international player and what other companies can learn from that journey. Plus, she talks about building partnerships, expanding into new markets, and how all of that will happen in the cannabis space. Enjoy this episode.Main Takeaways:International Interests: Companies, especially ecommerce companies, can sometimes think they are ready for international expansion before they actually are. In order to not get in over their heads, companies or marketplaces that want to expand internationally should start with countries similar to the one they already operate in — they speak the same language, use similar payment methods, and have common standards and practices. Once expansion there is successful, they can continue to seek other opportunities abroad.Partner Up: Sometimes the best way to reach potential customers in a new market is to partner with companies that already have those customers' business. In the case of Good Organics, reaching new customers in Oklahoma or New York means forging partnerships with distributors of other goods and services that target customers need, and bringing the conversation into that space rather than trying to reach them elsewhere.Work Smarter, Not Harder: There is nothing wrong with riding the coattails of a big industry boom. If you can position yourself as ancillary or as an offshoot to the main product or goods that people are rushing to purchase, then you have just as good of an opportunity to be successful, and you don't have to compete with the big guys who are dominating the game in the main space.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Welcome back to Up Next in Commerce. This is your host, Stephanie Postles CEO at mission.org. Today we have Liz Wald joining the show, who currently serves as the chief strategy and digital officer at Good Earth Organics. Liz, welcome.Liz:Thanks so much, Stephanie. Great to be here.Stephanie:Same. Yeah. I wish this was in video format so people could see your background, but for anyone who can't see it, describe it a bit because I think it will be a good segue way and intro into this show.Liz:Absolutely. Well, my background is an amazing cannabis plant. It is fully crystallized and ready for harvest, full of amazing terpenes and somebody is going to really enjoy consuming it.Stephanie:Yeah. When I was going through and looking at where you've worked previously, it was really cool to see where your journey has led you through places Etsy and Indiegogo, and now to the cannabis industry. And I wanted to hear a bit about your background and how you got to where you are now.Liz:Sure. Well, I went to business school at Kellogg at Northwestern and I graduated in 1995. And a lot of people were going to banking and consulting and whatnot. And I looked around and I was like, "This whole internet thing. It seems it's going to be big. People are going to be shopping and doing things like that." And so, I was also not really interested in going to a big corporate. So, I found my way to a small group of people doing consulting to a little company called AOL back when you [crosstalk] mail was a thing. We were getting thick magazines with CD ROMs in them and you had a dial up internet connection. So, some of your listeners might have been too young to even know what all that is.Liz:But, basically that was the beginning of when people were really thinking about whether e-commerce was going to be a legit thing. And at that time, people were like, "You'll never buy clothes. That's crazy. You'll only buy books or CDs," back in the day. So, I got into the industry, through that initial work with AOL. And then, from there, I did a lot of different things. One of which was built my own business working with women all over Africa bringing fair trade products to the US and then reselling those products. And I'd like to say it was about 15 years too early, a little ahead of the curve on a sort of fair trade sustainable businesses, but I learned a ton about what it's like for makers and importing and exporting and just the whole life cycle of getting a product made. And then from point A to point B.Stephanie:I think we still need that. I mean, I think we can just come back and do that still.Liz:Exactly. That experience between my experience at working with AOL and then, my experience working with these makers set me up really well when I saw this opportunity to join Etsy. And it was back then, there was only about 50 people working at Etsy. It was really small. They were doing under a hundred million dollars of what's called gross merchandise value sort of stuff sold on the platform. And they really wanted to go global. And I was like, "Well, I'm your girl. I live in New York. I've had experience doing global and I've got some experience with e-commerce." And so, that's how my journey got me to that space. And then, from there when new things popped up like crowdfunding, I got on that boat and then cannabis.Stephanie:That's amazing. So, I would love to maybe touch on Etsy for a bit and hear about, what that looked going global. Like, what was it when you entered Etsy and where did you take it to? Just some of the details around that, that seemed super fascinating.Liz:Yeah, sure. So, the thing that's interesting about the internet is you can look at your stats and almost immediately you're like, "We're global. We've got people coming from all over the place." So, it's very tempting early on to say, like, "We're ready to go international." And I think a lot of the learning is that because the internet is so global, it makes companies, I think jump early, perhaps even earlier than they should. But I didn't know that then. Etsy didn't know that then. It was very early days of all of this. So, when I came in, I was like, "All right. Well, we've got all these sellers who are living in other places," but most of the buyers at that time were still in the US. So, it's global, but it's a little bit different because you're not having a full marketplace outside the US and a lot of the buyers don't even know that that product was made in France or the UK or Japan or whatever. They just see a cool product and they want to buy it.Liz:But we wanted to try to develop those outside markets and Etsy had a real first mover advantage in the US for like digitizing the craft fair, if you will. So, the first thing you really understand is the way business works in other countries, isn't necessarily the same as the US. And the first thing I did, everyone was like, "Hey, let's go to Guatemala, let's have sellers." And I was like, "No, no, no, we're going to Canada. We're going to Australia. And we're going to the UK because A, they speak English, B, they use credit cards, C, culturally, the expectations for quality control and everything else are the same.Liz:And then from there, we can start looking at other European countries where you've got language and other things that might be different, but similarly, expectations and whatnot." The other major challenge when you have a marketplace is payments. So, the way somebody typically pays for something in Germany, France, and the UK are entirely different. And this was way before we had all these amazing payment companies that existed. 10, 15 years ago, we didn't have those kinds of tools. So, back then, you know, Germans use very little credit. They use effectively a debit card. It comes straight out of their bank, but they do that differently than we do it. They don't actually, do it the same way. The French at that time were still writing checks. I mean, they weren't using credit either. And then in the UK, they were using credit sort of the way we normally think of it and the systems were different. So, Carte Bleue was the French credit card. We didn't have a way to process that in the US. So, those kinds of issues came up very early.Liz:Like, are we really going to invest in the payment platform, let alone the language and converting euros to dollars and all those different tax pieces and all that stuff. So, that stuff spirals up real quick. And I think when you're a small company, you've got to understand, like is it worth it for us to take part of our engineering and product development team and put it toward that problem today? Or are we really going to just allow sellers who are willing to jump through their own hoops to be on essentially a US platform and then cultivate that and come back to international later. So, those were some of the challenges we had to think through. And then that learning really helped me when I went to my next places.Stephanie:Yeah. I think that's such a good lesson just overall, because it can be so easy to see the shiny thing of like, "Of course, I want to like be in Vietnam and get all the products there and serve this tribe here and buy their goods." It's easy to want to jump on that instead of being like, "Wait, let's do the maybe more risk-free semi boring things or like do more of what we're already doing a good job at, and then expand afterwards and bring people to you if you can, while building up a stellar platform."Liz:Yeah, exactly. And I put together this thing in my mind, I called it best. B-E-S-T. And the B and the E were sort of at a macro level, is a country easy to do business in? Is there an entrepreneurial mindset? Is there access to credit? Like at a big business level. And then economically, is there strong GDP? Like, do people spend money? Is there access to regular services? If you're going into a very much a developing country and you're expecting regular shipments and all of that, and then power is going out every other week, that's a real problem.Liz:So, you have these two business and sort of economics pillars and then you have the other side, which is sort of the social and technical pillars. So, that's the S and the T. Like, socially, is it very trusted and common and high risk tolerance and a global mentality and a trust in the markets and people are just very fluid with shopping online and that kind of thing. And then finally, it's just the basics of like, do the payment systems integrate? Are the platforms open? Is there social media access? All those kinds of things. So, you really have to look at those big macro economic things, as well as the cultural things to figure out if you're going to the right places for your products and services.Stephanie:Yeah. I completely agree. So, the one thing I keep thinking about too, now that we're talking about payments and how to explore different countries, and I feel you've been ahead with seeing certain industries and I think being way ahead of your time and introducing things probably before it's even like has the technology there to be able to support it. But I keep thinking about crypto and right now we're still worrying about payments and there are a lot of payment companies, but it's still tricky of like converting things. And I think of this world where you don't even know what's happening behind the scenes. Like everyone's going to be transacting, it's all going to be a similar currency and all of that's going to go away when it comes to converting different currencies and what plugs into what, like, things will just work in the future and the underlying tech behind it, or whatever crypto is behind, it doesn't really matter to the average consumer, even if it's maybe smart, not just payments, but also smart contracts and stuff too. Like, same thing. Like it just works. What are your thoughts on that today?Liz:A hundred percent. I couldn't agree more. I mean, the analogy I to use is everyone watches TV, zero people know how a television works.Stephanie:Yeah. [crosstalk] in the early days, or they may have known how their computer works in the early days or storage and all that, but then it's like, you kind of take it for granted.Liz:Yeah. You just use it. And crypto I think is really interesting and I think more interesting is blockchain, the technology in general. The backbones of this. And it needs to be figured out so that you can... If you happen to have ether and you want to use it, it's as simple conversion that you don't really think about just the way you have your phone and you hold it up over a terminal and somehow magically your credit card pays for something. It needs to be at that level of simplicity so that people don't think about it. And I think that the key benefit of blockchain and crypto, setting aside, of course, the security and traceability, it's just removing costly friction. It makes me bananas that it takes three days to send a wire transfer and they charge me $25 on one end, $15 on the other end. And I'm like, "Guys, I sent that email in a millisecond, why can't I send my money? And why are you charging me $25?"Liz:And, you know, it has so much to do with the security of, "This one transaction, is it going from bank A to bank B?" With blockchain, all that goes away and you don't have to pay those crazy fees. You look at the developing world, the amount of money that goes to a Western union on transfers and payments, it's outrageous. [crosstalk]Stephanie:... very scared, I would think.Liz:Absolutely.Stephanie:Yeah. Like, they're definitely going to be gone in a couple of years. I used them. My aunt and uncle are in Germany and they're like, "Oh, we sent you money via Western union." And I was like, "What is that? What do I do with this?" And then they're like, "Yeah, I think you just go to a grocery store like Safeway." I'm like, "What?" And I saw the fee and it was a whole thing. I'm like, "Wow, how are you all still even around? Like, can you guys just send me a Bitcoin and I'll be good." So, how should companies be preparing for that? Because right now so many companies, I see them either investing in their own payment technologies, figuring out all the logistics for that, or investing in other people's technology of course, and onboarding with that. But to me, it all feels a little bit short-sighted if knowing that the world could be very different in just a couple years, and it's not going to be this much friction.Liz:I think most companies, I mean, Etsy was in a really unique situation in that it was a marketplace and very few payment options existed for marketplace. You basically had PayPal and eventually Amazon payments, which was domestic only for a long time. And so, Etsy made the decision to build a payments platform. I would not suggest for most companies, that is a route to go. Blockchain and crypto on top of that, I think Visa and MasterCard and companies that are trying to dethrone Visa and MasterCard use their rails, bring in crypto, be able to use their backbone, but not really pay all the Visa and MasterCard fees. I think those are the companies that are going to solve this problem. And most companies that are doing e-commerce, whether they're selling soil or t-shirts, or Elon and his cars like, ultimately they're going to have a third party that's figuring out the backend of that to make it easy for consumers.Liz:But those problems, I think just like dial up was a disaster and now, we're doing a live Zoom with streaming video, no problem. So, I think those problems will get solved. And especially for smaller companies, I would just let the process happen and then just integrate it when it's easy for consumers. And in the meantime, most people are going to use a credit card and be fine with it.Stephanie:Yeah. I love that. It's easy to forget how many technological problems have been solved and how many times people thought like, "Oh, we'll never be able to figure this out. Like, we'll never be able to figure out dial up. We'll never be able to figure out cars like horses are the way that we're going to be traveling." So, I feel like it's such a short term mindset right now. And people are like, "We won't be able to figure out the energy usage of mining Bitcoin," or whatever it may be. And it's like, "We figured out a lot of other things so I'm pretty bullish on America and people in general figuring it out."Liz:Well, it's so interesting you said cars and horses because I'm working in the cannabis industry and hemp, the cannabis plant is the same thing. Hemp and cannabis, it's all the same plant. Obviously, it's grown in different ways for different purposes. But back in like the twenties when Henry Ford was making a car, he made a car out of hemp. Like, it's as strong as steel. And here we are now a hundred years later figuring out that, "You know what? Hemp could be an amazing product that is a carbon sequester. It's super strong. It helps regenerate the soil. There's so many great things about it." So, sometimes we make innovation moving forward and sometimes we come absolutely full circle and now have the additional technologies to make it scalable or whatever it is. So, I just think it's a really interesting dichotomy.Stephanie:Yeah. Well, let's jump into Good Earth Organics. Tell me a bit about what it is and what drew you to this company.Liz:Yeah, sure. So, in a nutshell, we make soil. And so, I didn't know this and a lot of people probably don't realize that like when you go down to a store and you buy a bag of potting soil, there's no dirt in it. It doesn't come from someone's backyard. No one dug that up and put it in a bag.Stephanie:I actually always wondered where it came from.Liz:Yeah, where does it come from? Is there a giant place where we're taking all the dirt? So, soil is made from organic materials. It's made from compost and it's made from peat moss and it's made from perlite or pumice or other natural and organic elements that you mix together. In our case, Good Earth Organics, we do all natural 100% certified organic inputs.Liz:So, when you put a plant in the ground, it gets its food from what's ever in the soil. So, a lot of the earth soil today because of farming practices, pollution, just people stomping on the ground, all over the world, that soil doesn't have the nutrients that it used to have in it. It's compacted, it's got toxins in it. So, if you want to grow really super healthy plants, you've got to put it in really solid soil. And, of course, it needs air and water and sunshine, but the food comes from the ground. And so, we make premium organic soil that is optimized to grow cannabis. So, it will have the right combination of nitrogen and phosphorus and potassium and other bunch of microorganisms and whatnot that will feed this plant and have it grow in a natural, organic enriched way.Liz:And the company is based in an area in Southern Oregon. I like to call it sort of the Napa valley of Weed because it's called the Emerald Triangle and it's Southern Oregon and Northern California. And some of the best outdoor cannabis is grown in this part of the country because of the weather and the terroir and the rainfall and all the things that mix together. But even here, people need to use the soil, actual, not from the ground soil. Some of it, the terroir you can grow, but they add this living soil. It's got living organisms in it. And if you think about what you eat every day, if you eat super healthy, wonderful food, you feel great. You work out, you feel healthy. If you eat a ton of junk food, you don't necessarily feel so good.Liz:And it's the same for the plant. If they're pulling a bunch of toxins out of the ground, it doesn't grow as well, or look as beautiful as the photo behind me, which we'll try to share with the listeners. And then whatever's in that plant is what goes into you. So, if that plant pulls a bunch of toxins and heavy metals out of the ground and then you smoke it or vape it or consume it in a beverage or whatever it is, that's going into your body. So, for us, it's all about a super clean, healthy soil. It's really good for the plant. It's going to be also good for you as a person. And it helps regenerate that existing soil that's not in great shape now. So, it's a little bit of a long answer to your question, but that's what we do.Stephanie:I have so many questions now because this whole world... I mean, I have heard for a long time that the soil that we have today, it's not what it used to be and that we used to be like kids would be out playing in the dirt and they'd be getting good organisms from that. And like, they'd be getting exposed to things and just they're not today. And it makes me start to think about everything we eat now and everything we do, like, is there a certain regulations that make sure that if something says it's organic and that means it's growing in a type of soil and it's been tested for toxins, like, what does the landscape look right now not just for growing cannabis in good soil, but overall?Liz:So, there's a couple of different things. So, at one level, the FDA, the US food and drugs association is not regulating cannabis because cannabis is not federally legal. So, there are other groups. So, we've got two certifications on our soil, OMRI and Clean Green. And these two organizations really look at the inputs. What's going into that soil? Then each state, state by state by state, because again, cannabis is not federally legal, technically legally, you cannot cross a state line with cannabis. So, if you grow it in Oregon, you have to sell it in Oregon. And every state has its own level of testing and their own specific requirements. So, Oregon and California and Washington have very, very, very high requirements to ensure that there are no toxins, no heavy metals.Liz:So, if you're a grower and your entire crop is hinging on, "Did I pass this test?" You want to be pretty sure that the inputs in your plant are great, so you don't fail those tests. And other states, especially where you're growing indoors, most cannabis in the US, if you're growing it in these 36 legal states, most states don't have the environment of Oregon, Washington, California, so it's grown inside.Liz:And even in Oregon, a lot of it's grown inside except for this area of Southern Oregon. And so, they're growing their plants and soil, but they're feeding it hydroponically and whatnot. And they're very, very careful about what those nutrients are in order to pass those state tests. So, if you see, OMRI or CDFA, which is California's certification on inputs like if you're a home grower, you know, "Okay. Nothing going into my plant is going to be bad for me, it's all going to be natural and organic, which is great."Stephanie:Okay, cool. So, why with this amazing [inaudible] like cannabis? Like, why not start expanding into, like "Now we're doing produce, now we're doing... whatever it might be.Liz:It's a great question and the short answer is you could absolutely grow your tomatoes in this soil and it'll be amazing.Stephanie:The best tomato I've ever had.Liz:The best tomato ever. And most of our cannabis growers, some of them have huge farms. They also have amazing vegetable gardens. They grow all their own things because they're amazing growers. And if you go to goodearthorganics.com, there's a woman on there named Joy. And she came in with these radishes that are the size of softballs, and she grew them in our Gaia's Gift Soil. And she's like, "They're amazing. They're juicy. They're huge. They're incredible." So, people do use our soil for things other than cannabis, but cannabis is a massively growing industry. It was about $20 billion in sales this past year 2020. It's going to 40 billion.Liz:So, it's doubling in the next few years and cannabis on the east coast sells for $4,000, a wholesale pound. On the west coast, it might be a thousand dollars a pound. So, our soil, we're optimizing for people that are growing things for a $1,000 to $4,000, a pound. Even heirloom tomatoes don't cost that much, even at the most expensive organic grocery. So, it's just a huge market to go after. And because of our 12 years or 13 years of experience working with growers and really optimizing for cannabis, we want to take that heritage and experience and target it in an industry that's booming and that can absorb a higher cost soil.Liz:If you go down and buy a bag of our soil, it's not going to be the least expensive one on the shelf just like organic food or organic strawberries costs more than conventional ones. So, we want to be in this growing market and we also want to use all this experience that we have from this learning when we go into new markets. We've just entered Oklahoma and you have 6,000 growers there, and they're all pretty new to growing cannabis. And so, we can come in and say, "Well, we've got 12 years experience from Oregon, let us help you think through what might be the right products' soils, nutrients, whatnot, to grow your cannabis."Stephanie:Yeah. So, what does the partnership with the farmers look like?Liz:So, basically, bigger farmers, growers, cultivators, they come to us and they say, "Hey, this is our planting season. This is how much soil we need." Some of them ask us to create small changes based on things that they're doing. But for the most part, we've got these three core soils that we make. One of them is sort of a fully loaded, it's got all the nutrients in it, it's got everything you want.Liz:Another one is we call it inert. It doesn't have any living nutrients in it. It's just a really great base. And sometimes I explain to people if you've got a sponge and you've got dish soap, you can use that sponge more time... You know, you put the soap in it and you wash your dishes, the soap eventually runs out, but the sponge is still there. And that base of the soil is like the sponge. And then you add the nutrients in as needed. So, people who are growing indoors, they have very specific regimen of how they're feeding their plants, but they want really a nice, healthy thing for the roots to hold onto and for the drainage to be just right. And then they can add the food as they need it, but keep using the base and then replace the base in the next growing season.Stephanie:Mm-hmm (affirmative). How do you think about new markets? I mean, I can see you being very strategic about that, just you were with Etsy. So, how do you choose a place to go and then how do you even get on the radar of these farmers and acquire new customers?Liz:Yeah. So, it's a great question. Part of it being in Southern Oregon and since 2008, people know us here. So, they know of us and they come to us, but we started looking... I live in New York and New York just finally legalized cannabis and we have a not legal $4 billion market already. So, this is just a huge opportunity. So, being in the east and looking at already what's been going on in the west, you can see where major opportunities are happening. So, I mentioned Oklahoma, Oklahoma is a medical only state and they have more dispensaries per capita than any other state other than Oregon. And they have 6,000 growers. Now, some of these growers grow two plants and some of these growers grow 2000 acres. It's a wide range.Liz:But when you look at these new markets that are just literally exploding flowers like it's blooming overnight. You can see that they don't have the knowledge of more sophisticated markets. And it's such a great opportunity to say, "Hey, we know we've got products that will serve that market and that there aren't a lot of other companies yet in that market." So, Oklahoma was one place. Another place might be Michigan or Illinois. Those are relatively new cannabis markets with massive amounts of people and a lot of learning. So, we're looking at those kinds of markets. And of course, ultimately New York now. Right now, New York only has 10 licensed growers. They're all these big multi-state operators. So, over time, as we see how many licensed growers are going to be in these other areas with big populations, we could map out where we want to go.Stephanie:Yeah. It also seems like you would have maybe two different types of farmers that you would need to reach. I mean, there's the entrepreneurial person who's just like, "I want to get into this industry. I've never farmed before, but I know there's an opportunity." And they're probably, very savvy when it comes to like their digital savviness or okay with going online, trying something, maybe if they see an ad from you, they're like, "Yeah, sure. I'll give it a try." And then you have this whole other segment of customers that it's probably just a part of their farming strategy where they're like, "Oh, I've done, all the other [inaudible] before. I always just go to my retail location and I pick up the soil I need, or I have a big truck delivery of it." And they're not really accustomed to going online and maybe having orders coming in like through e-commerce. So, how do you approach these different types of customers?Liz:Yeah. You're totally right. So, we think of ourselves as direct to grower. So, instead of, DTC, we're sort of DTG. And the first group you mentioned, I put them in the home grower category. With the pandemic last year, tons of people, particularly young people were like, "I'm going to start gardening. I'm going to start growing things." And now there are over 20 states that allow home grow. And so, those people, you're absolutely right, they're going online, they're seeing Good Earth Organics soil on our website, on Amazon, on walmart.com and they're reading like, "Wow, this looks like great soil. It's healthy. It's going to be good for my plants." They could come on our website and attend a webinar about growing, things like that.Stephanie:I was going to say, I love the tutorial, How To Grow Weed 101.Liz:Exactly. But then there's the large cultivator. And those people are going through either an independent garden center or a hydroponic store and they're coming in there for all their needs. They're buying soil, they're buying lights if they grow indoors, they're buying nutrients, all these things. It's really a commercial endeavor. And so, with that market, we are partnering up either with the distributors that sell to those guys and doing education at that level so that people understand why Good Earth Organics soil and nutrients are valuable to these growers. And that's what we're doing in Oklahoma it's partnering with some of the local distributors there, educating their customers that they've already been working with for years, who like you said, maybe those are people who historically were growing tomatoes and alfalfa and who knows what. And so, they're used to coming into that an environment. So, we see that direct to grower conversation at a different level than the one for the home grower.Stephanie:Yeah. So, when I'm thinking about a traditional grower going in and seeing the products that are there, I mean, even from my perspective, I'll go to a [inaudible] I need some soil, "Okay. We've got Miracle-Gro and this one. Oh, this one has a nicer name. It sounds a miracle. It's going to turn my plant into a big plant. This one seems like it's not." And I just pick one based off packaging. Obviously, I'm not as knowledgeable as a farmer, but how do you really make sure that your product stands out and it really showcases all the benefits without being there? I mean, you guys are there.Liz:It's absolutely a great question. It's not easy, is the answer. For us, our name, Good Earth Organics with the giant organic on the front like that helps. And we have our certifications right on the bag. If you look at some soil that's synthetically made and you flip over and you start reading the back and there's giant warning, "Keep away from children," et cetera. It gives you the idea that, "Maybe this is great to grow my lawn really quickly. Maybe it's not something I want to be eating after I grow it." Of course, these are obviously tested and no one's going to get sick or whatnot, but it's just that-Stephanie:[crosstalk] we know of.Liz:Exactly. If you go to the grocery store and you see the whole organic section and you see the not organic section, you can choose. And especially items that like, I know the berries, they're sprayed and it's right on the berry. It's different with an orange or a banana where you're peeling off the outer skin. So, some people might decide, "I'm going to spend a fortune for those raspberries, but I'm going to buy the conventional bananas." And so, I think with soil, people are starting to understand like learning that like what's in the ground goes in the plant. And it's up to us to provide more of that education through podcasts, through advertising, through our website. And hopefully as consumers really start to think about everything that goes into their bodies. And again, the pandemic, it's kind of like, what is a pandemic? It's a virus that was transmitted from person to person that came about probably because we've done a lot of damage to our planet. There's a lot of pollution and chemicals and whatnot. And I think people are getting that into their heads to think more about what goes into their bodies.Stephanie:Yeah. It also seems like now's the time when consumers for a while we're focused on like bigger is better. So, like I was mentioning around like looking at the soil and being like, "This one will get you the biggest plant or this one will... Go to the grocery store. Oh, I want the bigger one." And now they're starting to really think about, "Okay, what's in that? Where it's being grown? Maybe I'm actually okay with these smaller raspberries that might become bad in two days but knowing that they're organic versus the one that looks beautiful and sits around for two weeks and it's still okay." Like, I think now's the time when people are starting to question a lot about how they eat and consume things and where it's grown, but to your point, education is key. And I think there's still a lot of room there. Now I'm just wondering about anything I'm eating, "What kind of soil is it grown in? I don't know. And what are the regulations here in Texas? Probably not much. I don't know."Liz:Well, the thing is testing. So, we have great anecdotal evidence and we grow our own plants at the company and compare those to others. But now we're doing very detailed third-party testing. So, we can say, "Hey, if you use our soil versus these other soils, this is how your plant is going to grow. This is how much terpenes is available in this plant." And terpenes is what gives flavor and aroma to anything that you eat, whether it's an orange or a cannabis plant. So, it's going to tell you how much production is in each leaf, et cetera. So, we're doing those tests now so that we can say to people, "Hey, this is not only certified organic, but you're going to get more from the plant. And maybe it is going to be growing, not just faster, but much, much thicker stock, much bigger leaves," all of those things.Liz:It's not about how fast it grows. Yes. You want it to not be slow, but how much do you get out of it? What is the yield at the end of the day? And so, through these studies that we're doing now, we'll be able to actually prove what we've known, sort of anecdotally, and just from our own personal experience in-house growing our stuff against other products. And that'll really also be part of the marketing it's like, "Hey, if we can say you get X percent more terpenes in each cannabis plant," people are going to be pretty excited about that. Or, "This much THC is in this plant versus this other plant," people are going to be pretty excited about that.Stephanie:So, what channels are you most excited about right now when it comes to your marketing efforts? Are there any ones that you're bullish on or that you're testing the other people maybe are sleeping on?Liz:Well, I think this last year, it was really interesting. Cannabis is not a federally legal product, but it became an essential item overnight with. It was like, "Wow, from illegal to essential in a month kind of thing." And it exploded e-commerce in this category. In general, e-commerce we saw massive growth but I'm really excited about the home grow market and the opportunity to talk to people yourself directly who are interested and want the education and want to learn more and probably are, I'm not going to say that you don't care about price, but if you're growing four to six plants on your own and you want them to be great and you're going to spend say a hundred dollars on soil, you'd probably be willing to spend $150 on soil if you understood the value and the benefit that was going into that plant.Liz:So, to me, that's a really exciting market because it's brand new and home growers are going to get most of their information online from trusted sources. And because we've done this since 2008 with professional growers, hopefully people will consider us a trusted source. So, I'm super excited about that channel. On the larger cultivators, those people do go to hydroponic stores and independent garden centers and whatnot. And the hydroponic stores are also moving very much online so that they can... If you're buying two pallets of soil, that's very different than two bags of soil, people also want to be able to get that quantity delivered to them. And maybe they don't live that close to a store where they can pick it up or whatnot. So, I do see opportunity in the larger cultivator.Liz:People with massive farms, I mean, they're getting truckloads of soil. They're not ordering it online. They're going direct conversations. But I think the home grower and that sort of mid-sized person starting to... Maybe they're doing a shipping containers worth of grow, they have a huge opportunity to talk to those people online and really help with the education and through the whole growing process like soil is step one. But then, you get to the vegetative state where it's all green and you add certain nutrients to feed the plant at that time. And then it starts to bloom, these beautiful flowers and you give it different nutrients to help with the terpene production and the blooming. And then it gets all crystallized and sugary. There's a third set of nutrients that you add at that growing. So, we want to help people through that entire cycle.Stephanie:Yeah. I mean, I think I just need that 10 step process for any of my plans, even just thinking about which ones do I trim back, which ones don't I, should I be watering it right now when it's dormant? I mean, why don't we have this just for, in general, when even having plants or having at home gardens. That whole world to me feels like something I need to learn, but there's no easy spot to find good education. And then growing cannabis is a whole different level like you said. I mean, do you see more like the large farmers who are used to having the conversations and going to that person... It seems in one to three years, they're all going to be operating digitally too. And a lot of times kind of having the average consumer operating in that market being the home grower also helps, highlight the benefits of that to these bigger farmers who maybe aren't operating that model right now. How do you see that transforming?Liz:Well, I think what we're going to see is lots more technology at the cultivator level. So, I mean, already there are these amazing startup companies that let you see like, "Okay, we have a slightly yellow leaf in the seventh bay of the fifth row in the third level, what's up with that plan?" And it's like, "Oh, that plant got a little too much water." Like everything is becoming extremely technical when you're growing in mass volume and for huge production. So, I think what you're going to see is you're going to see a separation in the industry of... Like we have craft beer today. We have these small batch amazing craft brewery where the brewer is experimenting with things, and then you have huge mass market beer. And I think you'll see that in cannabis too.Liz:If you have a cannabis beverage and you're a Budweiser size company, you're constellation brands, which has made early moves into the cannabis space, they're going to grow... They might even do synthetic THC that's created exactly the same in a very technology driven. The craft person is going to use technology in a different way to make sure that every plant is perfectly healthy and whatnot. And I think the companies that are more integrated with those people, digitally, they will be doing... But at the end of the day, soil is one of those things. You can't get it digitally. It's a physical thing you've got to have. And so, whether they're placing their orders online or talking to their growers or whatnot, I think ultimately they still need to just get this physical product. But we will see huge inroads in technology in running these companies and running these businesses just we've seen in every other industry.Stephanie:Yeah. I completely agree. So, what are you most excited about with Good Earth Organics? What things are you doing right now that you're really bullish on? Where do you want to be in a couple years?Liz:Yeah. In Southern Oregon, we've got this great reputation, we're well known, but I'm super excited just to take us to the whole US. And one of the things we're doing to do that is raising money. And because I spent a few years of Indiegogo doing crowdfunding, I wanted to be able to leverage that experience here at Good Earth Organics. And we're doing a crowdfunding campaign right now on a platform called SeedInvest. And the thing that's great about this is that everyday average person can invest in Good Earth Organics today and ride this wave with us for expansion. And sometimes with private companies, you have to be an accredited investor, you have to have a certain amount of capital, et cetera. With our opportunity, you do not have to be an accredited investor.Liz:The minimum investment is $1,000, which is pretty accessible for a lot of people. And the coolest thing about this is you're investing in the cannabis industry, but you're not, "Touching the plant." We sell a fully legal in every state of the country product soil and nutrients. But because we're going after this cannabis industry, it's a way to invest. And everyone talks about picks and shovels, right? Like Levis got started during the gold rush and all the bar owners and restaurant owners in California who were near the goldmine, they did great, whether or not people found gold. And so, we think of ourselves in that same way and ancillary to the business or to the industry. So, it's an exciting time because we're raising this capital, we're going to go national and all the things you're talking about like how do you build the brand and how do people understand who you are and doing the testing. That's where we are right now.Liz:And my whole career has been come to companies when they've got a vision, but they don't know exactly how they're going to get there. And it's a super exciting time to scale the company and capture these new opportunities. So, I'm super excited about that. And I love that we can open this to everyday regular people who want to jump on this train with us. So, anyone in my [inaudible] you can find us on SeedInvest or from our website, goodearthorganics.com.Stephanie:I love that. I mean, it's also so true to your roots of what you've done so far in your life of like empowering people to be a part of that journey and trying to get artisans to be able to sell their products in the US and it just seems so true to where you've been to be like, "Yeah, we're going to do a crowdfunding investment thesis where everyone can join along with us." That's really cool.Liz:I really do like when we can get, "The little guy and the little girl," on an equal playing field with everyone else. And I think that's probably, technology, one of the most important things that has happened with the result of building the internet and e-commerce, and whatnot is almost anybody can put a website up and it's pretty inexpensively these days. And if not for free and be out there just like the bigger corporations.Stephanie:Yeah. So, the one big question I have is when do you think cannabis will be federally legalized? I feel like [crosstalk]Liz:If I do that [crosstalk]Stephanie:Make a guess, what are you thinking? I know you don't have to talk about this.Liz:So, I actually think we could get to 50 states having it legal before it's federally legal. We're already at 36. Practically, every day I open my email newsletters and it's like another state has it on the ballot. So, I think we're going to see... The way politics is today, trying to get Congress on one page and all of that, I think it's easier for states to say, "Hey, you know what? The job creation and the tax base from this industry is amazing. We need to get on board. Like, our neighboring states are taking all of that from us right now. Like, we need to get on board too." So, I think we could see that and I think we could see some legislation around banking and some of the other things that will allow capital to flow into the industry.Liz:And so, if more states come on and then the safe banking act passes or whatnot, at some point, federal legalization is going to be like, "Well, we might as well do it because all these states are legal." So, I think there's been some hope that the banking might pass this year. And so, we're all crossing our fingers on that. And I mean, Alabama is now got it on the state ballot. So, if you're seeing states in the deep red south thinking about cannabis, it's a really good sign.Stephanie:Yeah. And so, even if all 50 states did legalize it, you still can't do the cross state like transferring of cannabis, which to me is the biggest issue. I read an article a while back where maybe... And I might mix the states up, but there was a huge surplus of cannabis, maybe Nevada or something and then California didn't have enough like they had a lot of demand, not enough cannabis to sell and just the fact that like, they were just stuck in those two states where some of those cannabis was about to just-Liz:Go bad.Stephanie:... go bad. Yeah. And to me that's like, the biggest issue is not being able to like logistically be able to send it around where the demand is and just having to predict accurately like what will the people in the state need? And if you have a surplus then, sorry.Liz:I mean, it is interesting because I always say like, "We don't grow oranges in Minnesota, but everyone has orange juice there." And wine comes from Napa and things are grown where it makes sense, with the bread basket of the US and whatnot. And I think cannabis will get there like interstate commerce is just what we do here. It's just the norm for every other agricultural product or pretty much any product. So, that will change.Liz:And already some states, I think Oregon, California, Washington, and maybe Nevada, the governors have already pre-signed an interstate commerce bill, so if, and when certain things happen legally, they'll be able to... Like, if all of those states are legal, if all 50 states are legal and there are certain things that have happened, they'll be able to start doing that like on day one. So, there's a big push for that thing. And economically, people see, back to the orange juice example, that it doesn't really make sense to grow oranges in 50 states. So, I think we'll get there.Stephanie:Yeah. And I can see a big... Well, I mean, you can tell me, but it seems there'd be a big consolidation effort to [inaudible] people being like, "Wait, why am I growing something in Texas or something where it's very hard to do, maybe I'm going to close up shop here and go where it's a little bit easier or think about an indoor method." And it seems just by all that passing, there'll be another big shakeup coming [crosstalk]Liz:No doubt. And I think indoor has the ability to control the environment. And I think especially on a large scale, almost pharmaceutical grade cannabis, the beauty of outdoor sun-grown, the flavor and the texture and whatnot can be really unique. And it's going to be a little bit different from batch to batch, just like, the 2016 Cabernet is not the same as the 2015 Cabernet. But there's also going to be a huge number of products whether it's gummies like everyone thinks about now or in the future, I think, beverages is going to be an amazing thing. So, instead of going out and having a beer or wine with friends, you go out and you have a cannabis beverage.Liz:They're going to want whatever's in that beverage to be 100% exactly the same every time. So, that you have a beer, you know how your body's going to react to that and it needs to be the same. So, things that will probably be grown indoors and it'll be more of a manufactured type item. So, I think there will be different methods of growing for different purposes no matter what. It's not going to all be done one way. And so, there'll be a lot of opportunity in different areas.Stephanie:Yeah. And it'll be fun to watch.Liz:Yeah, absolutely.Stephanie:Let's shift over to the lightning round. The lightning round is brought to you by Salesforce Commerce Cloud. And this is where I ask a question and you have a minute or less to answer. [crosstalk]Liz:Okay. Yes.Stephanie:I'm secretly curious about what?Liz:Oh, wow. I'm secretly curious about... This is such a good question. I'm secretly curious about what other countries will legalize cannabis before the US.Stephanie:That's a good one. When you want to feel more joy, what do you do?Liz:I go outside. 100%. I hike, I ski, I bike. I do something in nature.Stephanie:I love that. Tell me about a time when you made a powerful choice that you still think about.Liz:Powerful choice I still think about? It's funny, throughout my career, I've always been like, "I want to go learn this." And something good will happen from it. And so, that was the case in cannabis. I decided, "I'm just going to start going to conferences and learning." And now I'm working at a company that's 100% focused in this industry.Stephanie:Yeah. That's great. What's something wise your elders taught you?Liz:Keep going, don't give up. I have two older brothers who are about 10 years older than I am. And I learned early that you have to learn how to play the game or learn how to throw the ball or you'll be the ball. And so, just keep at it.Stephanie:Yeah. I like that. If you were to have a podcast, what would it be about and who would your first guest be?Liz:What would it be about? It would be about all the exciting things that women are doing to build businesses and companies. And I would try to bring a bunch of younger generation folks and understand what their challenges are so we could mentor them and ensure that we have a lot of strong women leaders going forward.Stephanie:That would be a good thing. And then the last one, what's up next on your reading list?Liz:I have to say I'm a terrible reader in the sense that I love to read, but I spend too much time reading newsletters and things like that. So, up next on my reading list is, I would really love to read just a good summer beach novel that's completely mindless and I can just flip the pages.Stephanie:All right. Liz, well, this has been such a fun interview. Thank you for coming on and sharing your knowledge and it's just been really interesting. Where can people hear more about you and Good Earth Organics?Liz:Great. Well, first of all, thanks so much for having me. It was a pleasure to be here. You can find more about Good Earth Organics at goodearthorganics.com. You can learn more about investing at seedinvest.com/goodearthorganics. And since I've been in the internet space since the mid nineties, you could find me on all the socials pretty much. Liz Wald on LinkedIn and everything else.Stephanie:It's amazing. Thanks so much.Liz:Thank you.
Traditional retailers are facing different levels of competition from all these new ecommerce brands that have popped up recently, and are now being held to new customer expectations that many predicted wouldn't occur for years. Because of the acceleration of digital platforms and online shopping over the last 18 months, brick and mortar stores are in a scramble to catch up or risk being kicked to the curb. Helping retailers take charge of their digital transformation journey and get in on all of the online action is Sensormatic, which serves retailers with IoT technology to help them with things such as inventory intelligence and accuracy, gathering shopper insights, converting foot traffic, and more. Subramanian Kunchithapatham (KS) is the Vice President of Engineering at Sensormatic and he's been up close and personal with the brands as they implement the new technology that will allow them to compete in a digital world. On this episode of Up Next in Commerce, KS tells us what he's been seeing in the world of retail and how he anticipates the industry changing in the coming months and years. For example, he gives us the scoop on how Sensormatic partnered with Intel to turn already-installed store cameras into an A.I.-powered Smart Hub — basically an intelligent store that can provide insights into occupancy, foot traffic, track inventory, and even provide a personalized experience for customers if they have opted in. Hear all about that solution and others on this episode!Main Takeaways:So Trendy: Retailers have a number of new trends to keep up with if they want to compete with ecommerce. Thanks to the rise of online shopping, consumers are experimenting with and discovering new brands more than ever before, which means the customer loyalty traditional retailers have enjoyed is crumbling. Additionally, when consumers do show in-store, they want to do more than just shop, they want an experience. Retailers have to adapt to meet these new expectations by offering new omnichannel and cross-platform shopping experiences to meet customers where they are.Train, Train, Train: To digitally transform any organization means that there has to be an investment of not just money, but time. Employees need to be trained on new technology and strategies for using the data you gather, and the A.I. or machine learning systems you put in place also need time to be trained on the types of data and information they should be gathering and presenting to create the most value.A Future Full of Livestreams: Recently, retailers have been experimenting with the concept of livestream shopping — a brand will livestream an event and promote items, and those watching the livestream can buy the items right from that screen. This type of interactive and streaming shopping experience is going to become more popular as technology continues to advance and as the younger generation pushes that expectation forward.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey there and welcome back to Up Next in Commerce, your number one show for all things commerce. This is your host, Stephanie Postles, CEO at mission.org.Stephanie:Today on the show, I have the pleasure of chatting with KS, who's the VP of Engineering for Sensormatic Solutions, part of Johnson Controls. KS, welcome.KS:Nice to meet you, Stephanie. How are you?Stephanie:Good. How are you?KS:Good.Stephanie:I'm really excited to have you on the show. I was looking through our doc and I'm like, "There's so much stuff that I want to talk to," because I haven't had too many people on the show, with a focus on retail, so let's dive right in. I want to hear, what is Sensormatic Solutions and what does your role look like, there?KS:Yeah. Sensormatic Solutions is a technology company serving retailers globally. We provide IoT technology for retailers. Right from the edge to the cloud, we have several solutions focused on retailers, on the loss prevention side. How to prevent theft in the store, and the inventory intelligence focused on inventory accuracy. Then shopper insights which is focused on what is the foot traffic and how are we converting the foot traffic?KS:The top of all those things, we recently launched a new retail platform called Sensormatic IQ. It's a connected intelligent operating platform that unifies several systems that we put out for retailers. In addition to that, it helps you to connect third-party systems as well as retailer systems.KS:That's the digital journey that Sensormatic has done, and that's what Sensormatic does for global retailers. My role is for product development. A lot of technology transformation within the company has been driven by me.Stephanie:Over these past couple of years, what does the transformation look like? Especially when it comes to retailers, now probably welcoming technology into their locations, where maybe a couple of years ago they're like, "Oh, do I even need this? You really have to convince me," where I feel like, now they have to transform really quickly. Stay up with all these new E-commerce brands. Figure out how to get access to the same kind of data that these B2C companies can get instantly. What does that transformation look like?KS:Yeah, if you really look at the retail industry per se, it's the most digitally disrupted industry, right? There are lot of digital transformation that was happening in retail, much before the pandemic actually. Almost every retailer was looking at digital transformation.KS:The primary reason is, more and more online sales happen. When you look at brick and mortar stores, how do you stay relevant in the brick and mortar space? Because of that there was digital transformation that was ongoing with most of the retailers.KS:The pandemic, what it has done is it has accelerated the digital transformation. Now if you really look at, because of the pandemic, you see more need for unified commerce and more need for self-checkout. They like to see that the store is more healthy and safe. Those kind of needs are driving now. Sensormatic as a company, we have operated for over 50 years and we have a very rich heritage of delivering innovative solutions to solve a retailer's best business problems.KS:Even now, as we are going through the pandemic, we are working on new, innovative solutions, right from sensors to systems to software and AI-based offerings. Looking at, how do we help the retailers handle that disruption that has cast in the industry, and come up with new offerings so that they can proceed with their digital transformation journey?KS:If you really look at shoppers today, what the pandemic has done is, most of the people who have never shopped online, they're forced to shop online. Now, once you start shopping online, you get used to shopping online.KS:Now when you start shopping online, now that is one thing, where the online shopping has increased. Second thing is, when you start shopping online, what you realize is, you may be loyal to your particular brand. Now suddenly you have many more choices. Because you're not going into the particular store and you're shopping online, you have many more choices.KS:Now people want to experiment. Because they want to experiment and it is easy for them to experiment, there is a shift in loyalty that's happening, actually. That's causing troubles for some of the retailers, when people want to shift from their brand to another brand.KS:The other trend that you see among the shoppers is, no longer, shoppers want to really come to store and then only shop. They expect retailers to meet, wherever they want to shop, however they want to shop. Whatever time they want to shop, you need to meet them at their convenience, and not a shopper coming into the store and making.KS:Some of these trends, what happens is, for you to address some of these trends, then every retailer needs to adopt technology at a faster pace. If you have to shop anywhere you want and then, any time you want and then, any place you want. Then you want that item to be delivered to you, or you wanted to come and pick it up from the store, we call it as buy online and pick in store.KS:If you have to enable that, the retailers need to embrace the technology. If they don't have the technology embraced then they cannot deliver that kind of a customer experience. When you don't deliver the customer experience, then the shoppers are going to shift loyalty and go to whichever retailer who can provide that experience.Stephanie:How do you make sure retailers aren't, maybe scrambling to keep up, because I'm thinking, a lot of times if a brand or a big company's lacking or falling behind, and then they start just grasping for everything. "Whatever technology's out there, I'm just going to do it all."Stephanie:Often times, maybe some of those are just fads. How do you guide retailers on, "This is something you're going to need for the next 10 years. This is the way of the future versus this, maybe you don't need virtual reality for everything right now. Maybe that's a fad and it's only for certain brands"? How do you guide them around what's important?KS:Yeah. Actually you can divide it into two parts. One is on the shopper's side, if you really look at it. If I'm a shopper and I want to shop anywhere and everywhere I want, now increasingly, you see that retailers are adopting a messaging app-based shop.KS:If I'm on the Snapchat and messaging to you, by the way, on the side, I'll be able to shop. Even on the messaging app-based shopping, there are one of the retailers, Levi's who recently launched a Bitmojis. All the emojis, they call it as Bitmojis.KS:They dress up the Bitmojis based on the Levi's collection. As you are in the messaging app, you can pick something and then shop. That's on the shopping side where they're looking at, "How do I leverage technology to go shop?"KS:When it comes to back end, once I shop, then whatever item I shop, and if I say that I'm going to come to this store near my home and pick it up from that store, that item should be there in that store. You don't want to have your inventory accuracy. If you don't have all the right information correctly available, the shopper, when he or she comes to the store, they're not going to find the item.KS:We call this as a precision retail. Sensormatic side, having all the technology that will enable the shopper to get the best experience when they go do the shopping, either in online. If they can do the shopping online, and come to the store and pick it up, or you go to the store and order it, and it gets delivered to the home.KS:The retailers need inventory information, accurately for them to deliver the best experience for the shopper. The technology that enables that, we call it as precision retail, because if you don't have very precise information in the retail operations today, you'll not be able to enable a better customer experience.Stephanie:What are some of the things that you think are pretty basic, that all retailers should have? Inventory management seems like a no-brainer. Also, seems like something a lot of retail locations struggle with. What are some of the other things that's, you need to have these five things to succeed?KS:Yeah. I would say that, definitely accurate inventory is a must. You cannot survive without having accurate inventory. Also, a easier way of meeting the customer wherever they are. If you have to meet the customer wherever we are, you need to provide multiple channels for me to shop with you.KS:I should be able to shop from my mobile app, or I should be able to shop from my desktop, or I should be able to come to the store and shop. I should be able to experience. If it is an experiential items, people would like to come to the store, have a very good experience of the item, then make the purchase process easy. Some of those technologies will become important.KS:The next one would be self-checkout and mobile checkout. It has become more prominent now because customers do not want to touch, they do not want to interact with the people. They would like to come in, look at the item, and then purchase and have a frictionless checkout. Frictionless checkout becomes an important technology implementation for retailers to learn.KS:If you take it little bit as part of an experiential store, you need the higher technology in terms of, you need to have much better bandwidth in the store, for you to have a good, digital experience. 5G technology will play a bigger role.KS:Also, experiential stores will have to provide more appropriate content and more appropriate digital experience and digital engagement in the stores. Digital engagement technology is going to be more important.KS:I forgot to touch upon, when I said inventory accuracy, you cannot get to a better inventory accuracy without having an RFID-based solution, at least in apparel retail and some of the other retail categories as well. RFID plays a important role in getting to a higher level of inventory accuracy. RFID technology will play a big role.KS:If you go further, there are going to be other technologies in the supply chain, and back of the store operations. You'll see that robots are playing a role. Not every store and not every category of the retailer will be able to leverage, but there are certain categories, robots will play a bigger role.KS:Then the technology that will enable ease of last mile delivery and then confirmation to the customer. For customer who are ordering online, they're getting delivered with one stroke. Again, that becomes very important.Stephanie:Awesome. What are some of the things that hold retailers back from doing this, because I know when I was talking with Joe from Intel, he was saying, "RFID can solve a lot of problems. Also, retailers, it's hard to get them to do that. There's so many solutions all around, but it's hard to get them to actually implement the technologies, to track the inventory, to track traffic, whatever it may be." What's the pushback?KS:Yeah. I would not call it as a pushback. I would say that most of the retailers, if you're a brick and mortar stored-based retail, and today, you have lot of business processes, well-defined in the store. How do you operate?KS:Now when you implement a RFID-based technology for getting a better inventory accuracy and better tracking of merchandise movement in the supply chain as well, now they need to change a whole lot of business processes on the retail side.KS:When they have to change business process, that means it's a change management in the organization. They need to manage that change more carefully and they need to retrain their employees with the new changed approach on how they are operate.KS:All those things takes lot of effort, and it costs money to get the employees trained as well as, and it also takes time to implement the technology. They need more tech-savvy associates also, in the store. All those things will require effort and money.KS:Whichever retailer has gone forward, and we make life easier for many of the retailers who wants to pursue RFID-based inventory implementation. I would say that you got a retail industry experts in our organization who can help the retailers to navigate this process very less painfully. Then we can help in, how do you transform the business process? How do you go about implementing it? What are the best ways to do it?KS:We bring in lot of best practices in the industry, to help with the retailer, and that's how we solve. We do have many customers whom we have really helped go through this transformation, and then migrated them to RFID-based inventory.Stephanie:What are you most excited about? When it comes to all the things you just listed, what are you really passionate about, that when you talk to a retailer you're like, "This is the way forward"? What excites you most?KS:Yeah. I would say that, it's really, look at AI technology today, it has disrupted every industry, not just the retail. I'm really fascinated about how it is getting adopted within retail.KS:If you really look at it, in the past, almost all the retail stores, retailers have implemented loss prevention security cameras. These are IP cameras for security surveillance. That's what it was used for.KS:Now suddenly with the advancement of AI technology, now you can leverage the existing IP cameras in the store, and then put in ... They call it as a Smart Hub. We partnered with Intel and developed an AI edge IoT box, an appliance. We call it as Smart Hub. That box, you put it in the store, connect all the camera streams to that store. Now suddenly the store becomes the most intelligent store.KS:You can do whole lot of use cases and whole lot of pain points which you can solve for the retailer. For example, given the pandemic time, we looked at, during the pandemic we partnered with Intel. We have been partnering with Intel for almost two years, and we accelerated this development with Intel and started developing occupancy tracking solution.KS:People wanted to have reduced number of shoppers in the store. They wanted to have mask compliance. People should be wearing mask. Then all of the shoppers should be maintaining social distance. All these things are new mandates, and the retailers wanted to maintain the health and safety of the store.KS:We quickly accelerated our AI partnership with Intel and developed this occupancy, social distance and mask detection solution in that while. Not only that, now that we have our Smart Hub, the Intel-powered Smart Hub, that Smart Hub enables you to develop lot more use cases.KS:Now if you are a loyal shopper to the retailer, and if you've opted in and if you're a loyal customer for that retail store, now since you've opted in, the moment you enter the store, I know that, "Hey, Stephanie is walking into the store. She is the most VIP customer. I need to handle her better. I need to address her needs better."KS:We can go and alert an associate to go address to Stephanie because she's a VIP customer. That's one option, one example, I'm saying. This opens up lot more newer use cases and newer ways of engaging the shoppers in the store, just leveraging the existing security cameras.KS:If you really look at other AI technology, all these stores have whole lot of sensors, and these sensors generate data. We put whole lot of sensors from Sensormatic. We generate lot of data. We generate data from inventory. We generate data about strength. We generate data about foot traffic, plus we have lot of camera-based, vision-based data.KS:Now, combining all this data, again we can apply artificial intelligence on the top, machine learning models on the top and deliver very, very prescriptive insights to the retailer. That's the direction we are headed now.Stephanie:I'm imagining a dashboard where you plug in a lot of your cameras. You're getting these insights. What would that dashboard look like for a retail worker who could just go up and look. It's like, "Okay, you need to close the door. You're at capacity, or you need to go and restock this one thing right now"? What does that look like, behind the scenes?KS:Yeah. Actually, take the example of an occupancy. If the retailer can specify, what are the allowed occupancy you want to permit in the store, and then configure that in the system. Then the cameras of the entry and the exit can keep counting how many people are walking in. We can also put a display at the entrance. It can show a red or a green indication.KS:Green means, the shopper can go in, and the red means, shopper cannot enter until it turns green. That's a simple indication. What happens is, there's whole lot of dashboard. Once you have all these data, you can create a whole lot of dashboard and provide.KS:More and more if we look at retail, they don't have enough resources to take care of the store efficiently. The pandemic has put lot more demand on their associates, to do more work, because they need to ensure the health and safety. They need to take care of several other things in addition to their job, which they used to do before.KS:Now nobody has so much time to look at dashboard and come to a decision. We saw this need, much ahead and that's where we have put together a strategy and executed our strategy to launch the Sensormatic IQ platform.KS:Now what happens is, as part of our platform journey we can take all this data. We can apply artificial intelligence, machine learning models and predict what is going to happen. Then once you predict what's going to happen, then we can prescribe an action. That prescriptive action, we can deliver it in the retailer's handheld device or any form, where we can push it to the device saying that, "Hey, now your back door is open, or your fire entrance is locked," or something like that.KS:If you see that in this particular hour ... Let's say I have the historical data of this street. From the historical data I can tell you that in this particular hour, there is a possible organized retail crime can come and hit this store at this point in time.KS:I can send an alert to this retail as a protection manager saying that, "Hey, you're likely to get hit with an ORC crime today. You may want to take a preventive action, and these are the possible preventive actions you can take." You can prescribe exactly, where the retailers need not look at the dashboard and deduce that information and come to that conclusion.Stephanie:Well, that's good. It seems like it would be so difficult to come up with prescriptive outcomes for retailers. I'm thinking about these models that you built in the background, and you've got one that has seasonality. You have another one's being hit by the pandemic in a bad way. The other one's in a good way.Stephanie:How do you think about training these models in the back end, so it works for everyone and gives outcomes that's not just being trained on false data that's, maybe a little blip?KS:It's a very good question actually. Now what happens is, there can't be two differences. Not every retailer will have the same model. The nature of AI itself is like that. You need to retrain the model based on the context.KS:It's not a long time. You take two to three weeks of training in that environment. Collect data and retrain the model for that outlet. That is one. That's bound to happen, when you deploy it. The other thing is, other interesting thing you'll see is, take the example saying that, for retailer A, I say that, "This particular hour, you're likely to get a ORC, crime event happening."KS:Retailer A and retailer B, both are likely to get hit with an ORC at a particular time, but retailer A might respond to that differently. They may want to respond to that differently, whereas retailer B might be want to respond to the same prediction differently.KS:One might say, "Hey, I want to shut down that entrance for an hour." I'm just telling hypothetically. Another might say, "I want to push all the high-value items that are closer to that entrance, to the back of the store." You can take two different actions for the same prediction.KS:That's why any prescriptive action we work on, we need to work closely with a retailer to understand what is their context. For that context, how do you have to respond, and then put that prescription into the implementation for them. It has to be a joint coworking with a customer to make it happen, actually. To make it successful.Stephanie:Yeah. Yeah. It seems like every retailer needs an in-house data scientist who can plug in a few inputs of, "Okay, we're running a local ad campaign this week. It's going to be very different. There's a parade coming on by. Everyone's going to want my Matcha tea."Stephanie:Being able to add their own little inputs that, maybe a model cannot pick up on. You always need human input into any kind of model.KS:Yeah. That's true.Stephanie:Yeah, but the training part seems tricky, when it comes to thinking about, how do you implement retail workers and make sure they're thinking in this data-oriented way? How do you train them? Seems like a hard problem for retailers.KS:Correct. That is where technology companies like ours can play a major role, I would say, that you have to take the complexity out of the retailer. Try to understand the context and then make it easier for them to embrace some of these new technology solutions. That's where we have to do all the heavy lifting, and support our customers.Stephanie:Cool. I want to talk a bit about ... I was reading an article about how you guys, and you were shifting the company from this hardware model, to moving to a more SaaS model with your products, but also Outcome as a Service model.Stephanie:I want you to touch on that a bit because I though it was super interesting. You hear the world where everyone wants to be a SaaS company, of course, right now. That's the way of the future, but the way you explained it, I thought was really unique and interesting about how it's outcome-oriented. I was hoping you can touch on that, a bit.KS:Yeah. Definitely, as I said, Sensormatic has been transforming our portfolio across the board, right from sensors to systems to software to cloud. We did do most of our hardware portfolio. We can ensure that, now, even if you have bought it in the past, we can go back to the customers, some of our old hardware.KS:We have a mechanism to connect our old hardware, IP-enable them and connect to the cloud. We have invested quite heavily in terms of, how do you IP-enable all the hardware and take the data to the cloud? That's done.KS:Now we do get the data for our loss prevention portfolio. We get the data for inventory, and traffic portfolio. Almost all of them have a SaaS offering, and we actively sell all our SaaS offerings in the market.KS:Now, we also built a data lake on the top of all our SaaS offerings. Now, we get loss prevention inventory and traffic data coming into the common data lake. Now that I have the data, which I can correlate between traffic to inventory or traffic to loss prevention. All those correlations, you can do and come up with predictions and then prescriptions as well.KS:There's still, all the SaaS offerings, like any other Software as a Service, we deliver that. When you talk about predictive prescriptive offerings, now what we can do is, the example, previously I gave. You don't want the retail associate to spend time analyzing the data and trying to keep the business context in mind. Then try to solve whatever is the business problem that he has to solve.KS:The only way the retail associate is going to solve the business problem is by taking an action. That action is an outcome, and it's for a business outcome. We will be able to go, analyze the data on behalf of our customers. Based on their context, by taking their contextual input and then come up with a predictions and prescriptions that are specific to that particular customer.KS:When they act on those prescriptions, they're going to get a business outcome. So you can ensure that whatever business outcome they are trying to solve, you can enable that using our technology.Stephanie:Got it. Very cool.KS:When you're able to do that, you call that as an Outcome as a Service, where you say that, "Okay. Now I'm not talking about technology. I'm not talking about SaaS. I'm just going to deliver a set of outcomes, and then that's what you're buying from us. For us to deliver that outcome, we have to use several sensors, systems, software, AI model, everything, to get to that outcome."Stephanie:Yeah. I love that. I think of so many different consumer SaaS companies where it's like, you buy it, you get into this subscription. I'm locked into a year. Then it's like, you don't really use it. Sometimes you don't even know how to.Stephanie:I think of some of these big BI tools where you get in there and you're like, "I don't ..." Then you're locked in. It's so nice, entering into a mindset of, "I'm going to actually have something that shows me a solution right away, how to act on it. I don't have to put on my data hat and start analyzing it and figuring out correlations. I'm going to have something at least guiding me on where to even start thinking about that," which is awesome.Stephanie:Do you see any new shifts or things popping up right now, in the world of retail that, maybe you weren't even expecting a month or two ago?Stephanie:You're like, "These are some new requests that are coming in from clients, where they're trying to understand X, Y or Z, or they're trying to understand this new omnichannel world." Is there anything new that, now you're like, "We need to build this. We need to get on this right now"?KS:Yeah. I would not say as it's directly coming from the client, and I will just tie it back to the shopper behaving trends that we are seeing. How that's going to be the norm in future, and then how it'll shape the retailer.KS:If you really look at it, everybody is looking for a unified experience. I should be able to buy online, and then pick it up in store, or curbside pickup.KS:Now, BOPIS and curbside pickup, we see that many shoppers, for the first time, they experimented with buying online and picking it up from store or curbside pickup. We have seen some surveys, one from Sensormatic, one from NRF and another from McKinsey. All these surveys indicate that more and more shoppers will go for BOPIS or curbside pickup-based fulfillment.KS:This is going to be a norm. You'll have to support it. not everybody is implementing it today, but you'll see that more and more retailers are going to go and implement that way. The other thing, other interesting trend we have seen during the pandemic is livestream-based shopping, where you do a livestream of an event. Then as part of the event, you wear all the fashion clothes that you want to promote. Then people who are watching the livestream can click on the items and then they can make a purchase.KS:Okay, now we saw Walmart do in partnership with TikTok. We saw also, Nordstrom do an event like that. More and more retailers are experimenting with the livestream. I believe that in future, more and more retailers will try to embrace this livestream-based shopping, more than what you see today. I can only dole out some examples now, but one or two years down the line, you're going to see more and more happening in that side.KS:The other area, also catching up is, there are retailers who had big format stores. They are shrinking the format to the smaller format, or experience-only stores. You don't see many doing that, but you see few retailers doing that.KS:The experience-only stores, you have items you'll not be able to buy. You'll not be able to pick the item from the store. You can go to the store, you can experience the item, touch and feel. There will be lot of digital experience to augment that.KS:Then at the end of that experience, if you decide you want to buy it, you place the order. The item will get delivered to your home. That's an experience-only store. That's another concept that's just picking up.Stephanie:Yeah, but the shipping has to be good on that, because to me, I feel like so many shoppers are like me, where they need it quick. If I'm going shopping somewhere, I'm like, I probably want it that day. I love the idea of, the inventory's there for you to try on and see what fits, and get the experience, but I also want it that day, if possible. One-day shipping. Is that so much to ask?KS:I get it. Yeah, I think there are some who'd like to experience, and then they're okay to get it delivered to home. On the same day, if it gets delivered, that's again, that's why we call it a precision industry. They have all the inventory. If they have everything readily available in that area, they may be able to deliver few on the same day. Right-Stephanie:Yeah.KS:... if they go down this path. Smaller format is like, again, bring in more digital experience. Don't consume too much space, and provide a more digital experience. Then stock and operate with a smaller format. That's another trend that's happening.Stephanie:Yeah, which is nice because it feels like there's a lot more opportunity to beta test and see what could work at a much smaller scale than, maybe a couple of years ago, where these retailers are like, "Go hard. Open up a big shop. Have all this inventory." Then they're like, "Darn, didn't really predict that well. This might not be the perfect location for it, or there's not as much foot traffic as I might have thought, because Blue Bottle just went out of business," or whatever it might be.Stephanie:It's nice to be able to have a little testing ground, and then pivot if needed. Consumers are actually okay with that model, I would think, where, maybe back in the day, they weren't.KS:Yeah, yeah. Also, you see another interesting trend that's happening is, now for retailers who are embracing the omnichannel experience where their shoppers can buy online. They're converting some of the stores into a fulfillment store. That's what led to BOPIS.KS:Another trend you'll see is dark stores, where they're converting some of the stores to be, completely a fulfillment center.Stephanie:Yeah.KS:There is no store experience there. You only go to that store to pick the item that you've ordered and then walk out, actually. That's another trend that's happening actually, to support the unified commerce experience.Stephanie:Yeah. What kind of industries do you think are fit to pull that kind of model, because I feel like there are some stores where ... Is there ever a good experience when you go on to certain stores you're like, "It's probably a hard no for this kind of store. I just need to get what I need to get"?Stephanie:What kind of industries do you think, it would work well to just have your store as a fulfillment center versus the Urban Outfitters of the world, you need the full on experience?KS:I think if you really look at, Whole Foods converted one of their stores into a dark stores.Stephanie:Wow. Whole Foods is an experience though. How could you do that?KS:The problem is, it depends upon what you are comfortable purchasing online, without experiencing. Then if you have that, then you can go and pick it up. You know all your standard items, what you normally buy, and you have experienced it already.KS:Now you don't want to waste time going into the store. You just order it. I don't want to waste time and go pick it up, and walk out.Stephanie:Got you.KS:There are items that are very standard. There's nothing much to experience, go down this path. There are items that you have experienced once. Now you like it and you don't want to change anything. You're certain about it. Go order and just pick it up. Those are the areas where it'll pick it up.Stephanie:Yeah. Yeah. Got it. Do you think live streaming is actually going to penetrate the U.S., because I still just don't ... I feel like, actually, people here are getting burned out from live stuff. Clubhouse was big, everyone liked it. Now everyone's like, "Oh, so much work. I have to be on the entire time. I have to think hard and really jump on that deal, if it is live."Stephanie:It just feels like we all got in this stressful rat race of everything live. Now it seems like people are pulling back to the more, at least TikTok. Little bit more preplanned, Instagram, Pinterest, of really think about and be more mindful about their purchases.KS:Correct.Stephanie:Do you think that's coming here?KS:It is coming here. I feel that the Gen Z, even today, it is ... If I go to my son who is 18 years old, I can never take him to a retail store. They still prefer to shop everything online. They would like to see it online.KS:For a certain segment of shoppers, there may be a segment of shoppers who'll still be interested in shopping through livestream or shopping through the app. There will be certain shoppers who still feel comfortable, because we all grew up in an age of going to the store, and experiencing it and buying it.KS:We are more in need for a socially, going out and interacting and getting it. Such shoppers will continue to go to the stores, but there will be a segment of shoppers who'll continue to buy through livestream. Even if everything becomes normal, 100% of stores are open worldwide, there may be a segment of shoppers who'll shop, I feel.Stephanie:Okay. Yeah, that'll be interesting to watchStephanie:All right, well, let's shift over to the lightning round, if we can. The lightning round's brought to you by our friends at Salesforce Commerce Cloud.Stephanie:This is where I ask you a question, and you have a minute or less to answer. Are you ready? Yeah.Stephanie:Okay. What's the nicest thing anyone's ever done for you?KS:Oh. Anybody who helps me. I grew up in a world of gratitude. Anybody who does any remote help, I feel nice about it. Even small things, I feel very nice about it actually. It may not be a bigger thing.Stephanie:Okay.KS:There are a lot, actually, if you really ask me.Stephanie:All right.KS:I would say, I'm blessed. Every day, I get so many gifts in terms of people helping me.Stephanie:I love that. What's one thing your kids have taught you, that made you shift your idea on E-commerce or retail? You talked about live streaming, but what else have they taught you recently, that you're like, "Whoa, mind-blowing. Never would have thought about it that way, but you're 18, so you know everything"?KS:Yeah. If you ask me, I cannot buy a shirt or a pant without getting a feel for the cloth or fitting. Without getting a feel for the apparel. My kids will not even blink their eye in terms of ordering it. By looking it online, and ordering it online.KS:Even after they receive it, and if it's not good, they don't mind quickly returning it as well, actually. I find that as a hassle, but I learned from my kids that, it's a way of life. The first time I could sense that E-commerce is going to get adopted in a big way was from my kids, I would say.Stephanie:Yeah, that's great. What's one thing, or piece of technology that you don't understand today, that you wish you did?KS:The technology of 5G as well as, currently, people are talking about 6G. I used to work in a telecom industry. I used to play close attention to these two technologies. The pace in which 5G took, caught me by surprise. Then I had to go catch up.KS:Now I'm getting tuned to all the 6G news which people are pushing. Now I'll pay more attention so that I don't do the same mistake I did with 5G.Stephanie:How do you stay on top of all of the E-commerce trends? What do you read? What do you listen to? What do you do each day, to stay on top of that?KS:Yeah. I subscribe to a lot of ... Now today, gathering information is not a problem at all. I subscribe to all kinds of thing. You get McKinsey, Deloitte, Sears-based retail and so many other retail subscriptions and technology subscriptions.KS:Best time for me to catch up on that is mostly in the weekends. I spend couple of hours looking at all the things. That's how I catch with the technology and the trends.Stephanie:Well, KS, this has been such a fun interview. Where can people find out more about you and Sensormatic Solutions?KS:Thank you. Thank you, Stephanie. It's a pleasure talking to you. Hope to talk to you again.Stephanie:Yeah, yeah. Tell me where people can find you though? Where should people look up Sensormatic Solutions?KS:People can find me in LinkedIn, and the company, Sensormatic Solutions' webpage as well, they can find me.Stephanie:Amazing. Thanks so much.
That first online sale plus the first time a retailer agrees to carry your product are always exciting. But when you can't meet the demand of your online customer base or your design process is slowed and shipments are delayed, that's when the headaches come twofold. But when your mission, and your product, is something you truly believe in and think can leave a lasting impact, you take all the good with the bad and keep on pushing forward. For Stojo, a company that produces collapsible, leak-proof cups and containers, there have been wins and losses of every kind, and CEO Jurrien Swarts has been riding the waves as his company tries to get a piece of a $22 billion industry. On this episode of Up Next in Commerce, Jurrien takes us through what it has been like to design, launch, and distribute Stojo's game-changing product. Plus, he guides us through how difficult it is to scale and market a business, and what it takes to make hard choices like laying off and rebuilding a staff. Enjoy this episode!Main Takeaways:Digging the Design: When it comes to delivering a product out to the market, it has to work in a number of different ways. The internal team needs to be invested in the design and believe in that product, but you also have to be willing and able to take outside feedback from customers in order to iterate and expand. Find stakeholders who can contribute in meaningful ways and trust them to keep making the product better.Punch Above Your Weight: Sometimes you have to get scrappy and find ways to compete without the help of big budgets or a ton of staff. In these instances, there are avenues to explore that offer high returns for very little investment as long as you can find the right partners. Influencer marketing is one of those areas and, when small companies make the right connections, they can compete at or above the level of any big brand.Sharing is Caring: In the past, it was uncommon and even frowned upon to share information, best practices, financials, or anything else that could be seen as a competitive advantage. The younger generations, though, value transparency and many DTOC and DTC brands that are run by millennials and Gen Z are embracing the idea of information sharing in order to help themselves become more data-driven.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we're ready for what's next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey, everyone. Welcome back to Up Next in Commerce. I'm your host, Stephanie Postles, CEO at mission.org. Today, I'm chatting with Jurrien Swarts, the co-founder and CEO of Stojo. Jurrien, welcome.Jurrien:Hey. Thanks for having me.Stephanie:I'm excited to have you on. I was looking through Stojo a bit and your background. What was very interesting to me... You can tell me if this is wrong, but I saw a quote where it's like you and your co-founders were reading 4-Hour Workweek and that's how this came about, which to me was wild because everyone's read 4-Hour Workweek, but I've never actually heard of someone creating a company based off that model. I wanted to hear a bit about what was going on back then. Tell me the whole story.Jurrien:It's kind of wild. I was at Credit Suisse and had a colleague. He was actually my manager. We got into this habit of going for runs every day during our lunch hour and we had this two-guy reading book club going. One of the books that we eventually got to was Tim Ferriss' 4-Hour Workweek.Jurrien:If you read it, you could either create something because you're a creative, which today I'll call myself a creative but at the time, I was like, "I'm not a creative. I can't sing. I can't write. I can't..." They were like, "But you can also make something, preferably in China," I think was the guidance. I said, "Well, I speak Chinese. I've always had a thing for product and design. Just personal interest. Why don't we see if we can come up with one of those?"Jurrien:So we started to brainstorm and a few weeks after having read the book, or even maybe a month, Alex comes in and he goes, "I got the perfect idea. How about a collapsible coffee cup that goes in your pocket so it's easy to take with you on your commute and travel?" I was like, "That's not a great idea." I didn't really like it. I was just like, "Whatever."Jurrien:Another couple weeks pass by and I was actually in the shower, where I have a lot of aha moments. What's funny is the more I talked to other founders and other people, a lot of people have a place where they have their aha moments. For me, it's driving on the interstate long-haul between home to whatever or in the shower.Jurrien:I had a vision of my grandmother's daycare setup where she used to have the dishwashing rack. She'd always have the baby bottles lined up, taken apart. If you're familiar with those, they have a plastic reservoir, a plastic collar and a silicone nipple. It creates a leakproof type of seal with the screw on. I realized that if I took a collapsible dog bowl or [inaudible] type cup and put a lid on it like that, we actually could create this leakproof coffee lid that would actually help make this thing work.Jurrien:When I had that discovery, did some sketches and figured out that "Hey, we're on to something here." That's how it all started. That was 2011.Stephanie:So let's get back to your aha moment in the shower. You're like, "I know how to create a collapsible cup that won't leak." What did the process look like after that?Jurrien:Again, dating it 2011, '12. Rapid prototyping was just becoming a thing. They had things like the first 3D printers, et cetera. When you're making a durable good, you have the industrial design thing, you have the CAD files that have to get developed. When we went and priced that out, we were getting quotes of $30,000 to get to a prototype and maybe one or two iterations, way beyond the budget of what are significant others were going to allow us to spend. My co-founder, Alex Abrams, was the guy that I worked with at Credit Suisse. When we got that price tag, we knew there was no chance that our wives were going to sign off on that. We were just like, "Okay, this is done."Jurrien:A month later, Alex is at a Halloween party with his kids and he runs into Ben Melinger, who he was a fraternity brother at UPenn with. Ben had been a consultant and quit that job to work on a concept he had for a water bottle. He self-taught himself how to do CAD drawings.Jurrien:We said, "Ben, how's that water bottle going?" He's like, "I don't really know how to get it launched," et cetera. "Well, we have a project for you if you're interested." He said, "Sure," and so we made him an even partner. He did the CAD for the free, and then we started prototyping. That's how we took it to the next level.Jurrien:I guess for anybody who wants to do a product design thing, if you don't have the money for a designer and industrial engineer and you could expect to spend anywhere from 20 to $50,000 just to get that design work and prototyping done, find a co-founder who can industrial design and bring them in. It's the best way to do it because there's going to be countless iterations. You want somebody who's really vested in the product to make sure that what you come up with is really exceptional, and it's not just somebody who's doing it as a consulting gig and just wants to check it off their list and move on to the next project.Stephanie:I was going to ask, then, about how do you view... Especially maybe back in 2011, it's definitely probably newer but now, it seems like everyone is doing that, launching [inaudible], getting prototypes quickly. Do you feel like it's in a different place now, where you can maybe just go on an Upwork and hire someone to create 20 different designs for you? Do you think the world is different now where you might not actually need to find a co-founder?Jurrien:Yeah, I definitely think that. I mean, I think the power of Upwork and 99designs, things like that, is that it's open to folks who are living in areas of the world that are much cheaper to live in, and so you can actually get incredibly work out of Eastern Europe, out of parts of Southeast Asia, Asia. I've definitely gotten lots of help there.Jurrien:It comes down to your aesthetic and your attention to detail and your ability to curate and manage that process. But for anybody starting out, I'd say go for it. What do you got to lose other than some time and money? Usually, you get really good learnings from that stuff. I think that's totally a viable place to go. The other one is if you're college age or recent graduate and you had an engineering school in your school, you might have people that you can find that way as well who'd like to do it just for portfolio building, or just maybe you want to start a company together.Stephanie:Love that. What was your first sale like? Do you remember getting that first sale?Jurrien:Well, yeah. We had two first sales, if you will. We're an omni-channel business. We have our website and we do Amazon, and then we sell to brick and mortar retailers.Jurrien:The first sale was when we launched our Kickstarter in June of 2014, when we got that first backer and then the euphoria around that, having created a product, done a video, put together a campaign and then pressed Go was... It was really, really incredible.Jurrien:And then what was the fun thing about that was we went from zero dollars and passed our goal of 10,000 prior to midnight that same day. That was really great. Ultimately, we did... I think it was $128,000 on Kickstarter, so 12, 13 times what we'd set out to raise, which was... We needed the 10K to cover the tooling. That was really exciting.Jurrien:And then when we actually went commercial... So I left my job at Credit Suisse in the summer of 2015. The coolest thing was when the MoMA Design Store buyer came and found us somehow—probably through Kickstarter—and asked for samples. And then they actually bought our cup, and so we were being sold in the MoMA Design Store. It's like our first retail relationship. That was really special, as somebody who cares about art and design.Stephanie:That's awesome. So then after you were there, is that how other stores... You're in Anthropologie, I think Whole Foods. Is that how they found you, by just having that first retail customer, or did-Jurrien:No.Stephanie:... you get those partnerships in other ways?Jurrien:I mean, that was a slog. 2015 until May of 2018, I was a one-man band. My co-founders kept their day jobs and were involved in various ways, but for all intents and purposes, I was the one that I was all in. I had to learn and teach myself every aspect of the business.Jurrien:Frankly, I wasn't very good at the sales part of it. We got a little stop-start with Bed Bath, but our packaging wasn't quite right. We had supply chain issues just because of cash flow. We didn't have the right merchandising.Jurrien:It took bringing on a professional consultant, who's actually still with us today, is great, who really knew the retail category and specifically hydration and coffee tumblers. It's a pretty big category in the US. It's like a 22 billion-dollar segment.Stephanie:Wow.Jurrien:If you think about it, every major retailer, gas station, dollar store, every store is selling hydration. Getting somebody who really knew how that worked and then just slogging it out for a bunch of years, going to the trade shows, getting press where you can, evolving our product... We started with a 12-ounce cup, which was great for New York City-based commuter who goes to the corner deli and gets the 10 or 12-ounce cup of coffee that's the standard coffee in New York City. It also really works out really good for the UK, Australia, countries where they drink smaller beverages. But guess what? In the US, most people drink 16 or 20 or 24-ounce coffees. Our cup actually wasn't really optimized for scaling in the United States.Jurrien:It took until 2018 until we introduced what we call the biggie, the 16-ounce cup, and we added a straw because southern part of the country actually drinks a lot of sweet tea, iced tea, iced coffee for most of the year. Moving away from a hot-only, small, single-serve cup of coffee to something that's more common to the US market, that really helped propel us.Jurrien:And then we also moved away from... We started with some really primary colors. When I decided I was going to start a brand and really grow Stojo into something, I really liked how S'well approached the market. The way that I saw that play was they went hard after a very certain demographic, the [inaudible], female, millennial, Gen Z consumers. I saw that we could probably do something like that.Jurrien:Being in New York City, Brooklyn, I thought that's a pretty natural fit for me to target that demographic and try to have my sustainable product be almost like a fashion accessory. When we did that, that's when I think we started to appeal to the Anthros, the Madewells, the Food52s, the Whole Foods, et cetera.Stephanie:How did you go about that? Because I look at companies like S'well and a lot of the brands that are in Anthropologie and I'm like, "How they got there is so much through marketing." I mean, you can walk in maybe a TJ Maxx and see tons of S'well style [inaudible], stuff like that, where oh, looks pretty similar but the way they did it, like you said, attracted a certain kind of customer where it's like, "I'm a fan. I'm not going to [inaudible]."Stephanie:How did you go about it to become like that as well? What did you start implementing? What kind of marketing were you doing? What did that look like?Jurrien:A lot of it was, I think, just intuitive in the sense that since a very young age, I was always a consumer of brand. I liked brand. I would buy products based on their aesthetic, their utility, but also what the company's doing and saying.Jurrien:One of my favorite brands of all time was United Colors of Benetton. What appealed to me growing up in a really small northeastern mill town which was predominantly white, almost 99.9%, was seeing this just calico quilt of different representations of human beings and bright colors. Everybody in the photo shoots always looked like they were having a great time. I was just like, "Yeah, man. That's what I want in life. I want to be around beautiful, different people," et cetera. Jurrien:I think that always stuck with me. When it came time for me to helm my own brand, what I wanted to do... And I was also watching things like TOMS, Honest Company, looking at the Acumen Fund and their activities. I came from Credit Suisse where I was tangentially involved in a lot of socially-responsible investment activities for clients. I said, "You know what? I want to build a brand that does this, that's mission and purpose-driven."Jurrien:On the one hand, I have my sustainability message, and then I have control over the storytelling and the imagery that I want to put out there. What I want to do is appeal to people who want to support brands that they think are conducting themselves in society in the right way because it's the right thing to do and not because they have to do it or because it's the most expedient or the most profitable thing to do. I think that's the stand that I took, and then the rest was more... Because we're bootstrapped, I got a little bit more sophisticated in terms of the look and the feel of Stojo every year as I was able to hire people and bring on professionals. When we were shooting our own photography and I was doing my own graphic layout in PowerPoint, it's a very different look than when you start actually hiring designers and paying for photo shoots and then leveraging influencers, et cetera. There was an evolution.Stephanie:It seems like to build a brand like that, you have to rely pretty heavily on influencers. When I think about some of the brands that have really shot up recently, it does seem like that's one of the most strategic angles, to partner with someone who has your values and ideals and also the audience you want to reach. Is that a big part to your marketing playbook, or just a small part of it?Jurrien:It's huge. But interestingly, we've only really started intentionally and systematically, strategically, tactically flexing into that since, I'd say, August of last year. What happened was the height of the pandemic, we had to let go of half of our staff. We were about 20 people. We cut back to 10, to the most necessary. Really hard to do.Jurrien:But when we did that, one of the things that came from that was that we let go of our CMO, who was very high salary, recruited from a big place. The remit that he had was to help us scale this really quickly. We thought we were going to scale a lot faster than we ultimately did.Jurrien:When that all fell away, I just partnered up, actually, with my romantic partner, my life partner, Megan. She joined the team as a fractional CMO brand creative lead and she started implementing all these things.Jurrien:We were like, "What are we going to do with no budget? How can we do this? We got to get really scrappy. We don't have any money to spend. We have to be breakeven or profitable every month we can."Jurrien:The influencer strategy is one of those things that if your brand has the right market acceptance and fit and you can relate to the right individuals, it's a really, really interesting way to go. We've had a bunch of success there, but we're really still only getting started. But there's definitely a ton of brands that are those challenger brands that have done a lot of incredible work utilizing that. We're always watching what other people are doing and learning from it.Jurrien:Frankly, there's a lot of us who are starting to talk behind the scenes, management teams and making intros and talking to each other at roundtables and just sharing a lot of data and information. It's making us a lot more scrappy, successful. We're starting to punch above our weight, I think. A lot of DTOC brands are doing that.Stephanie:Yeah, because I was going to say it feels like the DTOC world is much more eager to share best practices and talk behind the scenes versus... I mean, we have podcasts covering basically all the C-suite and I hadn't really heard of a bunch of CMOs getting together and talking about best practices or the first 90 days, or CIOs. It seems like it's harder to do there, then all these new DTOC brands are like, "Let's all work together."Stephanie:How are you finding that community? Why do you think everyone's so eager to work together and share successes and failures?Jurrien:Well, I think it's structural and it's generational. If you got a big incumbent brand, they are recruiting from a very well-known set of folks in the C-suite. They've been doing what they're doing and it's working. They're sophisticated and they know their stuff.Jurrien:It works for them, given their size and scale. When you have billions of dollars in revenue and you're like, "My marketing budget is 10% of revenue," you know what you've got month to month, quarter to quarter. When you're a millennial or Gen Z-run brand, a lot of us just started doing it out of hey, happenstance from necessity.Jurrien:There's a lot of studies out there that if you're reading the blogs in Medium and LinkedIn and stuff like that that talk about... Even the New York Times, Wall Street Journal talk about how millennials are way more willing to share and talk about their personal finances, their negotiating tactics, how much they're making per salary, how much they paid for their house, their car.Jurrien:I think there's a lot of us understand that being transparent... And we kind of chatted about it a little bit about my personal approach to it before the show. When you share information with other people, if you're doing it to brag or whatever, that's one thing, and I think the older generation always thought that sharing is distasteful. You don't do it. It's not done.Jurrien:But I always ask, "Well, I don't know these things. You know these things. I'm asking because I'm trying to gather information and make data-driven decisions." DTOC brands and really good startups are all taking in data and tracking KPIs. They're making data-driven decisions. Not to say everything's data-driven, but there's a lot more of it.Jurrien:In our industry, everything's pretty opaque. I don't have the money to spend $10,000 for research on this one little thing, but I can certainly hop on a call, have a beer, share a coffee with somebody and just pick their brain.Jurrien:I think a lot of us are starting to do that. When you lead with vulnerability, transparency, authenticity—which these are all values we share and aspire to in our team, and it's part of what Stojo's about—and you say to somebody, "Hey. I don't know everything. I'm here to share anything you might need or want to ask but today, you have some information that I need. Would you be willing to share it? This is how I'm going to use it." 90% of the time, people are super thrilled to just be connecting on a real level and finding somebody that "Oh my God, this person respects me. They're a peer. I can help them and they can help me."Jurrien:It's a beautiful thing and it's really a metaphor for where we need to go as a society, is instead of thinking about everything as zero-sum games, just talking about how do we all get to happiness and balance and Shangri-La or whatever... I'm overstating a little bit, but this idea of just because I'm winning doesn't mean you have to lose. We can all win. We're going to be around for a long time. Who knows? Maybe one day, we'll collaborate together on something, et cetera.Jurrien:I try to foster that as much as I can. I really encourage people who are on the fence about hey, will this make me look weak or naïve or whatever, don't let that get in the way. Just think about what you have to gain, which is information that you didn't have before you asked the question and took that chance. What do you have to lose? Somebody that you don't really know is going to, I don't know, talk about you or-Stephanie:Not respond?Jurrien:Yeah, exactly. Or say no. I think training yourself to do that is part and parcel with becoming an entrepreneur and a leader.Jurrien:We shared our parenthood. The cool stuff about a lot of what happens in a startup environment and especially in me as a CEO, it's very similar to being a parent. You're kind of the CEO of the household. A lot of the stuff you're strong at or weak at extends to both areas of your life. You can actually get a lot of learnings and personal growth through comparing and contrasting methodologies and approaches at home and at work.Stephanie:I think there's not much of a separation between those two, especially now. The other day, I did this human design reading and test. Have you done this before?Jurrien:No, no.Stephanie:You might like it.Jurrien:Sounds awesome. Tell me more.Stephanie:Essentially, it tells you, "This is the design of who you are and how you might operate." I'll send it to you afterwards, actually.Jurrien:Oh, please do.Stephanie:You would really dig it. You need to have someone who understands how to read it, but it was very applicable to life and with kids and your partner, and then also thinking about business. It was saying certain things to me that I think I never had words, of like I felt a certain way, but then when she went through and was like, "Oh, Stephanie, you are an unconscious alpha. You need to lead in this kind of way, but you don't feel like you should be an alpha." I mean, it sounds a little woo-woo, but everything she has gone through I was-Jurrien:No, it doesn't sound woo-woo at all.Stephanie:I was digging it. It made me rethink how I even thought about myself when it came to work and life and just how it's all one and how to approach it in a completely different way than five years ago where it's like keep it separate. Don't try and mingle them together. That's when it gets messy. It was great.Stephanie:I think that's where the world's headed. Certain people are trying to just adjust to that new way of thinking now and is this even okay. It's okay.Jurrien:I love that. Please share. When say that, it's interesting. There's a lot of dogma that we are raised with as children that worked for the prior generation, or maybe it didn't, and we're stress testing everything nowadays.Jurrien:The one good thing about all the information sharing and the putting everything out there is that you get to try and think about and discard things a lot faster. You don't have to be pretty about it. I think this rapid prototyping and hacks approach that started with startups is now spilling over into dieting... Or not dieting, just the way you eat, the way you live, the way you sleep, the way you relate to your family and friends. I think it's going to bring about some really rapid shifts in human consciousness for the better.Stephanie:I mean, the whole world is changing that way. I think that's where any bubbling up around... Even the US right now is having issues because people are starting to... They're meeting people 3,000 miles away. They're finding their community in different ways. It's not all just based off like, "I live here" anymore and we're the same within this one city. I mean, now people are thinking very different and finding their communities and having more of a voice by coming together more than we've ever had before.Stephanie:The whole world's changing so rapidly and people are trying to figure out, "How do I keep up with this? Do I stick with our roots of how my parents' parents' parents have always done it this way, or can I expand and do something different and live like a nomad and go where I want and find my people and have an impact on the world in a different way?"Stephanie:So tell me a bit about was there an inflection point with the sales at your company where it's like you were a solo person for a while, your other co-founders were working full-time, you were trying to build these partnerships and you're like, "I need a consultant that can help me with retail." When was there an inflection point where you're like, "Whoa. Now, we're off to the races. I need to hire. I need help"? And how many [inaudible]? What was that level when you're like, "Now, we're about to go fast and I need to hire [inaudible]"?Jurrien:Let me give everybody just a really high-level overview on what happened from 2014 to today. We raised capital on Republic, the crowdfunding site, so a lot of that information is public to the extent it's appropriate and stuff.Jurrien:So we were bootstrapped. I started with 125K from my family and a friend, just a small little check to get started, plus the 128K that we did on Kickstarter. Before that, I think we each chipped in 10K. I think we had 20K and then we did the 128 capital raise. We did another failed, but 20K Indiegogo in 2016. Raised 125 in capital, then did a small bridge round before I raised my first round. I'll just lay that out because I think it's instructive and informative for people who don't come from the typical equity-raising background.Jurrien:In 2015, I had a half year of commerce. That was internet and online. We did about 200K in sales. The next year, we did 340,000. The next year, we did 405,000 or something like... I can't remember the exact numbers. This is all me by myself, so 2015, '16, '17.Jurrien:In 2018, we came back from some trade shows. The houseware show happens in the spring in Chicago and in Frankfurt. I actually got some international distributors. Suddenly, the orders started coming in from them because Asia and Europe were actually ahead of the curve over the US in terms of buying into sustainable, reusable products. We actually started getting distribution in foreign countries.Jurrien:The orders started coming in and there were too many. I'd just had my second child, who was not even a year. I wasn't getting sleep and I was just overworked, just dogging it. I had to hire a person.Jurrien:I hired Jake, our COO. He's still with us today. He came from MALIN + GOETZ. I brought him in. I interviewed him on a Friday and I had him at work on a Monday. I was like-Stephanie:Wow. When you know, you know.Jurrien:... "Dude, I need your help." Yeah. I just was like, "This is the guy. I want him in here." He started on Monday and he took over all these purchase orders that had come in.Jurrien:We thought we were going to do a million dollars in 2018. We ended up doing 2.7 million dollars in revenue.Stephanie:Wow, wow.Jurrien:That's when I was like, "Okay, I have a growth trajectory here that will look good enough to investors to try and raise a small C round." I did a pitch night at WeWork, where I was using their offices. We ended up getting I think second place in this pitch. They made a 75,000-dollar investment. With that, I was able to raise basically about 700K, which brought my lifetime capital raise to a million bucks.Jurrien:From there, we hired the team in 2019. I got somebody focused on sales and marketing. I got customer service. I got a designer. And then we ended up, at the tail end of the year, bringing on after we did not get picked to go on Shark Tank... Because we were holding for that to see if we got an investment. They passed on us, and so I decided, "Okay, I'm going to plow ahead and then beginning of 2020, I'm going to raise another round."Jurrien:We were able to get to 6.5 million in revenue, 6.5 or 6.7 in revenue in 2019, and had a team of 10. And then the plan was to raise our mini A or our next seed B or whatever you'd call it. We didn't really fit in a good category, but we're going to try and raise two to four million dollars at the next level evaluation.Jurrien:So I started hiring the team out. That's how from January to April 1st, we hired and we were at 20 people. We'd extended the last two offers right before the pandemic hit, and they were set to start on April 1. I think we gave them their offers the week before the pandemic hit. They were going to start two weeks later. We're up to 20 people and we're on a trajectory where we thought we were going to double revenue again. What in fact happened was we were unable to grow year over year in 2020.Jurrien:We'd hired a team that was supposed to preside over a 14 or 15 million-revenue company and we were going to be a six million-dollar revenue company again. We had to cut the staff. It was really, really difficult to manage through that. I'd never done that before.Jurrien:That's where we're at now. We're at the 10 people range. We're starting to hire again. We're pretty confident that we're going to have a doubling of revenue again this year. It's looking like a really strong year. We have some amazing launches coming up, et cetera. We're starting to build.Jurrien:What was kind of a blessing in disguise was that when we cut back the staff last year, we realized that what we really needed to be much more scrappy was a different kind of a team than I had envisioned. A year ago, I was one person. I'd never scaled before, never managed that many people, all these things.Jurrien:Today, where we are today is we know much more what we need, and we have agencies to fill the gaps where we don't have justification for a full-time head. Now, our forward-looking hiring plan is much more based on profitability, certain KPIs that we have and then just very real needs that we've already established because we have agencies and we're paying them X. We know when that expenditure gets to this, then we can justify a full-time head. There's a lot of great learnings from going through that, even though it wasn't easy.Stephanie:Sometimes I think those forced adjustments end up being the best learning... I mean, we had to go through the same thing at my company had to lay off half the team not due to COVID. It was back in 2019. At the time, it felt like the worse thing that could ever happen, crying on the phone. Most of these employees were my friends.Stephanie:But now, looking back and being like, "So many good lessons in that." [inaudible] how to hire, like you said. Do you actually need a full-time employee? How do you justify an FTE versus an agency versus having a one-off contractor? It ends up being a hard lesson but longterm, sometimes companies that go through this blitz are able to come out on the other side stronger than before.Jurrien:Very much agreed and actually, I'll call something out again, I think, for the benefit of any listeners who are those entrepreneurial-minded, startup type people shooting for the sky because I'm one of them. That's why I'm sitting where I sit. If you talk to investors, a lot of times investors are not those people. They're actually the pragmatists and the realists. They've literally seen thousands of businesses like yours do either one of two things. They're usually much more disciplined and pragmatic. I think a lot of times, COOs, CFOs, those type of people also tend to have those personalities.Jurrien:What ends up happening is as an entrepreneur who's like, "I just need to make sure that we don't stall. We got to get it done. I have to make a decision now so I can go on and do the other 50 things on my plate," a lot of times there's a lot of inefficiency in that decision-making process. It's just guessing. What has to happen over time is the company needs to be run less on the seat of the pants and less on intuition and much more on discipline and just time-tested tactics of sound business principles.Jurrien:That's what, at a very high level, happened to you in 2019 and what happened to me. As a founder going through that injects you with a sense of realism and it matures you.Jurrien:It gives you wisdom, I think, that prior to that, because everything was on the up, you didn't really have that. You didn't have time for naysayers. You were defying all odds. Now, it's like no, it's not just about my vision and me anymore. It's actually a company and I have a responsibility to all these people. Accounting principles are going to define whether or not I'm still a business a year from now. I have to listen to those.Jurrien:I think that's the shift that can happen. It's really powerful when you go through that lesson. Your company doesn't implode. You come out through the other side of it. Those are learnings you're never going to unlearn.Stephanie:Yep, yep. I also think the emotions lead the scene where it's like during the time, you're just like, "Horrible," crying, the worst. Thinking about it now, it's how I would even operate, it's like you just... It is a cut-and-dried thing. You've got good margins or you don't. You're profitable or you're don't. Here's your [inaudible]. If it's not there, it's not there. There's no amount of friendships and feel-good anything that's going to fix that-Jurrien:Exactly.Stephanie:... I think, was one of the one of the top lessons for me.Jurrien:That actually ties back to that point that I made: if you don't take care of yourself first, you can't take care of others. If the company isn't sound and it can't pay its bills and keep the lights on, you can't employ all these lovely people who of course depend on you and trust in you and rely on you. But you have to make decisions as the leader in ways that will keep the boat afloat or keep the greater good going. Sometimes, you unfortunately have to make decisions that aren't popular, you don't like, you feel terrible about. But it's not about that.Stephanie:Thousand percent agree with all of that. I know we are running out of time, but I want to do the lightning round with you because I think you're going to have some epic answers.Jurrien:Oh, geez. No pressure.Stephanie:Uh-oh. Lightning round's brought to you by our friends at Salesforce Commerce Cloud. This is where I ask a question and you have a minute or less to answer. Are you ready?Jurrien:I think so.Stephanie:All right, first one. I'm secretly curious about what?Jurrien:What the profitability metrics are of the top 20 DTOC brands.Jurrien:The real deal on the numbers.Stephanie:That's a good one, I thought, though. Something wise my elders taught me was...Jurrien:To always make eye contact and listen to what the person's saying and give it a moment before you respond.Stephanie:That's a good one. You're very good at that. You made eye contact the whole time. Good job. What's up next on your reading list or on your podcast list? What are you diving into these days?Jurrien:Jesse Pujji did a podcast, Invest with the Best, I think it is, where he was talking about his approach to performance marketing. I've listened to it twice and I want to hear it again because it's so thick. That's one.Jurrien:Then there's this other podcast that I can share. I'm terrible with names and remembering things like that, but it was two of the original folks, the early hires at Amazon. They talked about the Amazon memo and narrative and the PR/FAQ approach. We're actually employing that at Stojo right now. Again, very incredible paradigm shift in the way of managing and sharing and presenting information and coming to decisions. So two things I'd highly recommend to people.Stephanie:Cool. I'll have to look that one up and drop it in our show notes. What do you when you want to feel more joy?Jurrien:I like a little bit of cannabis as a night cap and I really like to run.Stephanie:Nice. All right, and the last one. This may be a little bit different than cannabis, but same same. What's one thing that will have the biggest impact on e-commerce in the next year?Jurrien:Oh, that's funny. I think the battle of Facebook-Apple. I'm really interested to see what happens there, how we figure out how to continue with attribution and respect people's rights to privacy.Jurrien:My gut, if you think about the right thing, is we should attribute a commercial value to everybody's data. I as a individual should have the right to monetize and share that data. People should pay for it. Because I'm okay with people having my data because I think it leads to better decision-making and better functionality of the whole machine, but I want to know who's got it and how they're using it. I think there should be value for it for anybody.Stephanie:I agree. All right, Jurrien. Well, it's been such a fun interview. Thank you for coming on the show. Where can people find out more about you and Stojo?Jurrien:God. Look me up on LinkedIn. Check Stojo's Instagram and our website, obviously, and then give this podcast a listen.Stephanie:Yes. Do it. All right, well thanks so much for coming on. It's a blast. Been a blast.Jurrien:Thanks so much for having me, Stephanie. And Hilary, thanks for your work on the back end there. Really appreciate it.
It’s not easy to keep a digital audience engaged. And it’s especially hard when the product you’re trying to engage them with is … produce. And yet, Avocados From Mexico has set a gold standard for what it means to build a funnel and engage an online audience and it has somehow found the secret recipe for success (and also guacamole).On this episode of Up Next in Commerce, I was excited to talk to Ivonne Kinser, the Head of Digital Marketing and Ecommerce for Avocados From Mexico, and learn her many tales about how the company has used out-of-the-box ideas to take something that rarely gets marketing love — produce — and turn it into must-engage-with content. She took us behind the scenes of creating one of the top digital campaigns for multiple Super Bowls, and she dove into what the future of digital marketing looks like, including why Avocados From Mexico has been ahead of the trends when it comes to things like NFTs and blockchain. Enjoy this episode!Main Takeaways:Impressions Matter: Impressions are a metric that often is hard to really judge the importance of. But when you can correlate impressions to search activity, it becomes clear that building an awareness of the brand through impressions and exposure can drive conversations on social media. This in turn leads to more Google searches and native activity on a brand’s page.Eternal Iteration: You have to iterate constantly in order to adapt to changing consumer behavior. Constantly changing your platform is not a signal that your platform is failing or wrong, in fact it’s a sign that you are staying on the cutting edge and trying to meet consumer expectations at every turn.The Powers That Be: When setting a path for the future, it’s important to differentiate between trends and fads that will come and go and the forces that will actually drive companies and consumers toward a new way of operating long-term. For example, rather than get caught up in the hot new social network or gaming platform, think about investing in the technology that powers that network (A.I., ML, 5G, AR/VR, etc).For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey there. And welcome back to Up Next in Commerce. This is your host, Stephanie Postles, CEO at Mission.org. Today on the show, we have Ivonne Kinser who currently serves as the head of digital marketing and ecommerce for Avocados From Mexico. Ivonne, welcome to the show.Ivonne:Hi. Thank you for the invite.Stephanie:Yes. So happy to have you on. I think I just spent an hour going through your guys' website and then I got hungry and I realized it's probably not best to have avocados and salsa right before an interview. So let's see how it goes, I was willing to take the risk.Ivonne:Maybe it's a good thing because you can always get... Go for an avocado.Stephanie:Yes. Yeah, I agree. So before we dive into Avocados From Mexico, I was hoping you could touch on your background a bit. I saw that you moved from Venezuela to Dallas in 2001 and I thought that would be a fun point to jump off on hearing a bit about what inspired that move and what brought you here.Ivonne:Yeah. I mean, if you think about it now, that was a long, long time ago. I came and my first job here actually in Dallas, I have been here for over 20 years or 20 years this year actually. And I oversaw over 20 countries, the campaign of or the advertising for American Airlines across 20 countries in Latin America. And I was there for a long time, I think relatively I was there for about five years before I went to the resource group in Dallas and then I started going from agency to brands and brands to agency.Ivonne:I like both sides of the business until a point where I made a decision and I really liked to stay on the brand side. So I stayed there and right now I have been with Avocados From Mexico for seven years now.Stephanie:Wow.Ivonne:And counting. Yeah.Stephanie:That's amazing. So what pulled you to Avocados From Mexico? Because when you look at your background and what you just went through, it seems like such an interesting jump and what was the draw there?Ivonne:It is interesting. That's a great story. My career is full of stories but this one is one of my favorite ones because I have... I was also on the brand side with American Airlines after managing their account on the agency side, I went to the brand then Haggar company, Haggar Clothing then for a while I even go on my... I went on my own. I was very curious about entrepreneurship and just implementing my own ideas. It went great. It was on the fashion side, it went great, but I really missed the security and the stability of the corporate world and is when I went back then and went to Haggar Clothing and then Avocados From Mexico. But to your question my point is that fresh produce was nowhere in my experience or in my career.Ivonne:I was in transportation, telecommunications, fashion, apparel, retail, never even like the minimal experience in the fresh produce category and then the recruiter of Avocados From Mexico contacted me because they were studying the company actually, which is the marketing arm of two organizations, the growers and exporters of Avocados From Mexico in Mexico and the importers and the Packers and distributors of Avocados From Mexico... Hass avocado in the United States, they came together and created a marketing arm to market their products, avocados coming from Mexico. So at that point they appointed the president who is my boss, Alvaro Luque and he has been there from the beginning 2014, 13, and the recruiter contacted me and asked me if I was interested in going and speaking with them, with Alvaro and I was like, "What? What am I going to do with avocados?"Ivonne:I mean, I have... And that was before the first Super Bowl so I didn't even know that brand existed or anything. And she said, "Just go and talk to him and if you're not interested then fine, but I think that you would like it because it's a very entrepreneurial organization, is a very forward thinking and he is looking to really make an impact in the marketing industry." So that got me curious and I went and talked to him and yes I was fascinated with his vision. He told me the magic words. He say, "I want someone who... I'm looking for someone to build the digital marketing department from the ground up." And when I told him like, "Why me? I don't have any experience in the category."Ivonne:He told me that he was not looking for someone with the experience but he was looking for someone with very good solid expertise in the digital marketing side of the business who was very creative and who would be able to do what nobody else has done. And those are my magic words. I'm very creative. I love creative freedom and do exactly that, what nobody else has done. And besides is one of the very, very few cases in marketing where the marketing budget increases year over year because it's proportional to the sales volume and the sales volume of avocados have been growing year after year... Year over year since 2007 and especially since 2013. So I was sold.Stephanie:That's great. Yeah. I mean, such a good story and it's so interesting too when I think about other produce items in a grocery store, you would never even think like, "This avocado bag has a whole content strategy behind it." And they do Super Bowl commercials and like the stuff that you guys are doing to me seems so innovative. You're taking all the risks, you're trying things but what did it look like before you joined? How were they marketing and selling avocados? What was the landscape before maybe they entered the digital world?Ivonne:So when I started there, that was 2014, there was no digital marketing department per se. I mean, we were doing... We had a social media and we had a Facebook page and we have a few bloggers creating content, but I think that was about it. And then I started in September and my first assignment was okay now you have to build up Super Bowl digital campaign. And I was[crosstalk 00:08:43] okay. Yeah, whatever that means, right? But what has been very exciting about it is that we were talking offline before there was no preconceived notion of how a marketing practice should be. And that was... I think that is what has allowed us to do everything that we have done because nobody has ever say, "No, that's not the way we do things here." There was nothing.Ivonne:So we start creating, at least I can speak for my department that I started creating the marketing department that I thought and I think right now that is the right for these time. And one of the things that a lot of companies do is to become complacent and keep doing things the way they have been doing it for years without even realizing they are doing them. In our case, there was nothing. So it was a blank slate for us to build whatever our imagination can see. And like I was saying, my first assignment was... Was in September, I started in September, right? Super Bowl is next February and building a campaign, you can not build a campaign in just two weeks. So what's literally my first assignment is now you have to build a Super Bowl campaign. And it was the first time we went to the Super Bowl with a TV spot.Ivonne:So I did what I thought that it was best and not knowing or having an experience of what even means to be a winning Super Bowl campaign, right? I just did... Put a lot of love and passion into that but the best I could. And then I remembered that the very next day after the Super Bowl I had a call from one of my agencies and says, "Congratulation for the digital campaign." And I said, "Why? What for? What happened?" They say, "It was number two after Procter & Gamble."Stephanie:Wow.Ivonne:I said, "What does that mean?" And then it was in terms of the most social interactions, the campaign with the bigger bus after Procter & Gamble, imagine that. And that was the first year. After that we launched six more and every single year we were either the top one digital campaign or top two digital campaign. Of course now I knew, "Okay, somebody is measuring this. We're very competitive." So and then we purposefully look for that first and second place but the first year happened just spontaneously. We didn't even try.Stephanie:I mean, I want to dive more into that because I just watched your Super Bowl commercial from 2020 and it was so funny about what your avocado needs. It needs a helmet, it needs a baby carrier for it so it gets more skin to skin contact. I mean, it was really good, writing and super funny, which I feel like sometimes I don't always laugh at things. It actually was giving me a good belly laugh and I want to hear how you go about developing content in a way that you did especially with your Super Bowl commercials that are winning awards and coming in number two, how do you guys even start creating that campaign from scratch to make it connect with a lot of people?Ivonne:Yeah. You know that... I will say the most challenging thing about the Super Bowl is connecting that content across the different departments and disciplines because the concept of the TV spot comes from the brand team and the brand agency. So and I have my team and different agencies. We're like I mentioned before, we're very entrepreneurial organization. So pretty much every lead of every department gets to choose their advertising partners, whomever you feel more comfortable working with for whatever reason based on expertise or closeness or whatever it is. So then we have to... When the brand team define what is going to be our theme and they go to market to test three or four options and then they decide this is the commercial we're going out with. Then they give that to the digital team, to my team and I share it with my agency and we start concepting the digital campaign. And the digital campaign have to be able to stand alone and live on its own, stand up on its own but it has to have some connecting tissue with the TV spot. It has to look like the same story.Ivonne:But that is a huge challenge because how can you bring a story that in TV is 30 seconds and transform that in an experience that it has to keep users engaged for three weeks, because that's the time when we launch the digital campaign until the game day is about two, three weeks. So it's a big challenge. And we have... We develop all the experiences in digital with that connecting tissue in mind but created for digital audience is not only for them to watch, but for them to experience, to play with it, to interact with it, et cetera.Stephanie:Yes. How do you think about building out a call to action that gets people to go back to your website? Because oftentimes I watched these Super Bowl commercials and I definitely have more brand love towards the brands that make really good engaging or funny content. But I don't know if I've always felt drawn to go right over to the website. How do you think about making it a funnel that's actually going to convert and pull people into your avocado community?Ivonne:Yeah. Yeah. I'm going to tell you the story, I tell you I have many stories about the Super Bowl but let me tell you one that will illustrate a great, great example. Years ago, we also had a float in the Thanksgiving Macy's Parade and it was the same dynamic. The brand team who also manages PR has this project or this idea to go do the Thanksgiving Macy's Parade with a float. So we had a float then the CEO comes to my team and say, "Hey, we're doing this in brand so what you guys have to do is to create a digital campaign to go with this float in Macy's Thanksgiving Day, but it's going to launch three weeks before then we start concepting." So what we did is how we can do so users keep coming back after three weeks, every day, right?Ivonne:Because you want them to go come every day and participate every day and interact every day. So what we did is that we develop an interactive map and the story was that we're bringing the float from Michoacan, Mexico from where our avocados come from all the way to New York and you will see how... Stopping in key cities across the United States from Mexico all the way to New York city. So in each city we have videos, we had what are we doing in that video, in that city, et cetera, et cetera. But the key was that the only way the float can move is when users tweet or hashtag. So the more they tweet the faster the float goes to New York and we know that we have to be in New York by a certain day.Stephanie:Wow.Ivonne:So that was so exciting. I mean, users were so excited about it that the day of the parade, when we were monitoring the conversation online and you could see the excitement and users saying, "That's my float." And that was the most rewarding feeling because they felt that was their float because they brought it from Mexico. And just to wrap up the story, we deliver more impressions of, or campaign than the Macy's Parade hashtag, imagine that and-Stephanie:That's impressive and crazy.Ivonne:Yeah. I mean, we're just... Have the power of engaging the audiences, they work on your behalf and because we don't have the dollars that the multi-billion dollar brands have to compete in this type of competition if you call it, like the Super Bowl, for example. But we still have been top one and top two in terms of the most talked about brands and it's because we engage the users and they do it for us.Stephanie:I mean, that's why when I was digging into this Avocados From Mexico company, it was so exciting because at first I'm like, "It's a company about avocados." And I started seeing all these things you're doing I'm like, "They are really pushing the limits when it comes to marketing and being super creative of how to pull people into these funnels and get them engaging." And, yeah, it's super impressive. How do you think about the ROI around a Super Bowl commercial versus a float in the parade? What should the ROI look like or what should companies be going after when thinking about these really big moonshot level marketing campaigns.Ivonne:So every company is different and every company has different goals, right? But we don't manage or sales, we're a marketing organization but our job as a marketing organization we have two objectives that which is, build the brand Avocados From Mexico in the US and increase the demand of Avocados From Mexico in the US. So when we create these campaigns that has an enormous boss what we want to do is to put avocados top of mind. When you have, and I give you the examples of Super Bowl campaigns, when you have, for example 7 billion impressions that was a Super Bowl this year, 7 billion potential impressions on social media. Yes. I mean, you can tell the consumer heard about Avocados From Mexico a whole lot. So when they go to the grocery store, you're top of mind and and our conversation of course is very strategic.Ivonne:So we wrap our conversation around a fun story but really in the core of it, there's recipes, there's conversations about how to consume the avocado. In Super Bowl, for example, we say guacamole, we talk a lot about guacamole and Super Bowl. There's a research company called YouGov, the previous two years they did a survey one month after the Super Bowl and they publish their results and they say the winning brands one month after the Super Bowl. And Avocados From Mexico also is among the top one or top two in terms of purchasing tension increase even a month after the Super Bowl. So, and another thing is when you go and see... We're talking about billions of impressions in social media, right? And then you may think, "So what is even an impression? Who cares?"Ivonne:But it is important because that huge conversation that happen in social media is just a reflection of users engage talking about it. And when we go to, for example, and check the Google trends, how the searches for Avocados From Mexico, the brand, the brand name, the search for the brand name the peaks overlap. When our conversation on social media is very, very high, you also see those peaks of Avocados From Mexico, the brand name search is very, very high at the same time. So, yes, I mean, all this huge conversation that we create with campaigns like Super Bowl, Cinco de Mayo and Thanksgiving Macy's Parade, it really impacts the interest for the brand. So going back to our objectives which is build the Avocados From Mexico brand in the US check and increasing the demand of Avocados From Mexico in the US check, because we have seen also how these YouGov for example, is one of the companies that have shown the increase in purchase intention.Stephanie:Yes. Yeah. That's amazing. So, I mean, thinking about all these marketing campaigns that you've done, what is one of the more risky ones that you've done that actually ended up working where maybe people on your team were like, "It's not going to pay off."Ivonne:Yeah. One thing that I always start thinking even a year before the next Super Bowl is what kind of technology I'm going to integrate in the activation. I think that we live in a world that is dominated and I say this in a very positive way, I believe in technology as a positive force to move the industry forward. So, and there's new technologies every year and I see the technology not as a shiny object, at least not all of them but as a... Like I says, is what is moving the world forward and the marketing industry forward. So I start thinking about what technology I'm going to bring the next year. So last year and it was actually that campaign that you referred at the beginning, I wanted to bring the Vatoms that actually right now are super, super popular right now.Stephanie:What are they?Ivonne:NFT or they call it also NFT. Have you heard about NFT?Stephanie:I mean, I've heard of NFT is in the non-fungible tokens-Ivonne:Yes[crosstalk 00:24:25]Stephanie:Okay. Okay.Ivonne:Yeah. Yeah.Yeah.Stephanie:Al right.Ivonne:So then those are super, super popular right now in 2020. 2020, the other name is Vatoms.Stephanie:Okay.Ivonne:In 2020, we actually were the first... One of the first brands that use that as a marketing tactic and we were the first brand to put one of four advertising assets in the blockchain and that was even before everybody[inaudible 00:24:59]Stephanie:Wow. That's so early. You guys are ahead of every trend, basically.Ivonne:Yeah. I mean-Stephanie:Have you done AR already. I was thinking you have to probably have an Augmented Reality experience with your avocado. You guys have done everything.Ivonne:We did, actually was part of that same strategy. So what happened is last year I say, "Well, I want to do something with NFT, let's call it NFT even though we call it Vatoms last year, but NFT and we did, but what it makes so challenging to be early adopter or a trail blazer that you're bringing something that it hasn't been done before is that it's really, really hard to explain and sell the idea within the organization is like we're putting money towards these, we're allocating budget toward these and it's something nobody has done before is that going to work. And honestly, the answer is, I don't know. I mean, how can you know? You don't know if it's going to work but what we do is when we experiment with that kind of things, we experiment cheap as much as we can and we are really well prepared to pivot if we need it.Ivonne:So my agencies, and when I select my agency partners, it has to be someone that is extremely fast moving that or adaptable and can choose with a call cheap directions because if not, it wouldn't work for the type of approaches that we take. And when you can move that fast and when you have partners that can move that fast, the risk is minimal because we're in... I mean, in the digital space you can course correct in real time and you're going to be fine. The problem is when you don't have the right partner that can move that fast and you know that the campaign is failing or there's room for improvement or it needs to be optimized and you cannot react quickly. But it was a big success in terms of the, it created a lot of buzz and a lot of... Media talk about it and a lot of consumers came and visited our site and participate in our games too because of that.Stephanie:Yeah. That's amazing. So tell me a bit more about the NFT strategy. I mean, I understand the concept of them putting on the blockchain a scarcity thing, limited quantity but what were you actually putting on the blockchain? And are you going to do it again in 2021 now that more people understand the concept of it because of the NBA top shot stuff that really put it on the radar of a lot of people who maybe wouldn't have known about it before?Ivonne:Yeah. So what we did is a mix between Augmented Reality, actually it started... The idea started with Augmented Reality so users will sign up to get at the UTA wallet and then they will go to Google Walmart, for example, and then they will find avocados, digital avocados all over and they will capture the digital avocados with their mentor reality and save them to their data wallet-Stephanie:Like a Pokemon Go kind of game.Ivonne:Kind of. Yes.Stephanie:Okay.Ivonne:Exactly. Exactly like that. So they will call it the avocados and then exchange it for every avocado that they collect is a point. So it was part of a big game. So, but when one of those was a crown that you also saw in the TV spot and that crown also, we place it in the... To develop these kinds of objects, it requires special coding so we coded and somebody... And then users will participate to win it and the winner, we will send them the instructions and it was an object that could be placed in the blockchain and they could then sell it or collect it or save it for later or whatever they wanted to do. So it was like testing the waters without going all in but we want to do one. I think that's one of our goals as a company is just, if anything is going to be tested out there in marketing, in the fresh produce industry, we want to lead that.Ivonne:And of course we saw this is coming at some point. In fact, it came a year later but we know this is coming, this is common in marketing so we have to do this. So we did that the previous year, just to name another technology, we built an experience with IBM Watson, the artificial intelligence and that's another great story because it was such a creative implementation of Watson that even IBM contacted me and to her, "How do you guys do this? Tell me the story," and whatever. And then they send an email to all their subscribers using our campaign as a case story like, look how creative Avocados From Mexico is using Watson in a marketing campaign, because it was a totally unexpected application of what so now artificial intelligence tool.Stephanie:Wow. I mean, you're basically giving you a peek into the future, just thinking I want to know what you're thinking at all times, because you probably are thinking two or three years ahead of what other brands when it comes to a marketing and technology perspective are even thinking about right now. So what are you focused on over the next year or two? What are you guys betting on that maybe other people would look at, you'd be like, "Ivonne, that's definitely not going to play out. No one's interested in that." What are you guys shooting for right now or focused on building from a marketing campaign perspective.Ivonne:Yeah. So two things I want to say about that. First, let me tell you, we're in the middle of planning 2020, 2022 planning our fiscal year ends in June and it starts in July, so we're right now are planning processes in full swing. So any ordering process is six months. So in one of the first meeting, the opening meeting where I get to talk to my team before they start even thinking about what are we going to do for next year? I wanted to make very clear where has to be our focus and I told them and something that is... I think is served as a guide, when we look at the future, we need to see what are those forces moving us toward the future. Instead of looking at what is trending because I wanted them to differentiate what are the trends and what are the forces. The trends are now and they may fade, but the forces are what is going to build the future. In this case right now where we are, I will say the forces are definitely artificial intelligence, machine learning, data, 5G is going to change the way we consume content and the way we consume video.Ivonne:The trends, for example, on the other side are I will put gaming in that side is trending right now. I will put in home fitness, I will put... It's a trend, it may be permanent but it's not something so transformational as it is artificial intelligence, data and machine learning. So what are we focusing in the future? We choose to launch a platform called Avocado Nation, is an intelligent platform with artificial intelligence and machine learning engine at the core of it. We call it the next fix of avocados because it has the same intelligence power, obviously much smaller than Netflix but it was... The inspiration was the way Netflix deliver personalized content to their consumers. And as most of the content production companies, they have like 30% success rates in the shows that they put out there. I believe that the last number that I saw for Netflix is like 70% and it's because they really, really relied on that intelligence.Ivonne:So inspired with that, we say we want to create the Netflix of avocados and that's just one of the portions of this intelligent platform. And we have right now over 100 videos our goal is to get 2,000 videos eventually. And it's videos like any format, short videos, long videos, funny, serious of videos that it could be... It could go from a dating show to a recipe show, all kinds of videos to give the consumers a variety of content for them to interact with and in the meantime, the machine is learning from those interactions and helping us to make predictions in the future about what is the content that our first party data is more engaged with.Stephanie:Yes. Yes. I was just going to say the first party data access is probably... Is that big driving force behind creating an entire platform like this.Ivonne:Big driving. Actually, that was the purpose because with all third party cookies going away and all that, we have been working on that for several years now. And right now we have over 100 million users on our consumer data platform and we have a costume audience, that's our core audience, about 30 million consumers. So we already have... Again, we have been preparing for this since 2015 talking about looking toward the future and when all this happened and a lot of brands are scrambling to get ready quickly, we already have our audience. You never complete with... I'm the one building my audience. That's something that the machine keeps learning, the algorithm keeps learning but we're in a very, very good shape in terms of first party data.Stephanie:Yes. I think it's interesting too that you approach the platform in a way like an AI first focused way where I talk to and hear from a lot of brands and many of them are very focused on content, creating their own series and figuring out how to make that work for the company. But it's very interesting hearing that you're essentially approaching it like a Netflix style model and even thinking back to... I don't know if you remember the earlier Netflix days where when they started coming out with their own originals and people were like, "They're not good." It's like the whole time they were just using that as training data, they were learning what we like. They were learning what makes for a good series, what kind of format are people looking for? And I love how you guys are approaching your platform with that as a focus first instead of trying to figure it out afterwards and figure out, "Why aren't people interacting? Why aren't they loving this series?" Super smart.Ivonne:Yeah, exactly. And you know what? I have my agency, I have several agency partners but I have one that is over all the development and optimization of the website, et cetera. And I told them, "This is an ongoing project, is going to be always an ongoing project because... And I want to iterate every single week because the algorithms are learning. And as we learned about how users are interacting, there's always going to be something to optimize and change and improve the user experience and the user journey. So it's a mind shift because you are iterating and calling it changing, tweaking, it doesn't mean that the platform need is broken, it means that there's always, always, always the consumer behavior is changing and if you forget about that and just launch something and leave it, is going to be outdated next month. So you have to change as your consumer expectations and preferences change all the time, it never stops.Stephanie:Yes. How do you want... I mean, when thinking about your employee base, it sounds like they're working on a ton. You can be working on Super Bowl commercials, you can be working on day to day, like traffic generation. You can be working on an entire content platform where maybe you're trying to bring on new musicians and getting new series created. How do you instill a sense of creativity and an entrepreneurial spirit in them so that they're willing to jump around and work on all these things?Ivonne:It's just a lot of fun. I mean, I think that is... I work with seven agency partners because I think we do so much and every one of them has a specialization in one of the digital... The areas of digital and all of them I think say that Avocados From Mexico is their most fun account. And is one, because it's a fun brand but also because also they have a lot of creative freedom. I really value creative idea that is also strategic. We're very, very strategic. And as long as it ties to the strategy, the sky is the limit, their imagination is their limit. And then we really have fun bringing these crazy ideas. And we do so much that is impossible for one person to bring all the good idea. So everybody has the opportunity to participate and to lead and manage their own projects and they work also very collaborated between all of them and all the agencies, it feels like one big agency working together but it's really different partners.Stephanie:Mm-hmm (affirmative)Ivonne:And it's all about ownership, when people feel the ownership of a project it's amazing what they can do.Stephanie:Yeah. That's awesome. So do you have any advice around working with agencies? Because we've heard from quite a few people that a lot of them have worked with agencies, they didn't have good experiences they ended up the creative and the branding and marketing campaigns back in house. And so how do you go about making sure that you're setting up a great partnership and finding these agencies like these that you speak so highly of?Ivonne:I believe that the agency choice is such a personal choice. Let me explain, the person that is... Or the company culture, the culture of the team, this agency is going to work with internally, the decision maker within the organization has to be a perfect match with the agency. And with that, I want to say, there's not a perfect agency for every... There's not a one pit soul. And I'm not talking about, there's great, great agencies that may not be a good fit for certain people or certain companies. In my case and in the case of Avocados From Mexico, just because we have the freedom to slate the partners we want to work with, they are a perfect match. And I think that makes a difference.Ivonne:So what is my criteria, is that they have to be a very, very creative agency, which of course, any agency should be, but it's a different kind of creativity. They have to move fast, they have to be nimble, they have to be a non-conformance. They have to be... There's so many things that it wouldn't work for us if it wouldn't be that way. And I think that every... That freedom that we have to select our partners should be... Any company should have it because it's like selecting a life partner or selecting a business partner is someone you really, really have to compliment each other and fit perfectly.Stephanie:Yeah. Really, really good advice. All right. Let's shift over to the lightning round. The lightning round is brought to you by Salesforce Commerce Cloud. This is where I ask a question and you have a minute or less to answer. Are you ready to Ivonne?Ivonne:Yes. Stephanie:All right. Hard one first, what one thing will have the biggest impact on ecommerce in the next year?Ivonne:Data.Stephanie:All right. Tell me a bit more, what are you thinking around data?Ivonne:Well, data, and I think that companies... Any company, any technology company that has anything to do in that feel of ecommerce is really, really fast right now creating the new best solution. There are things they are working on right now that are going to come out next week or in a month or two months that doesn't exist now. And they are building all that based on data they are capturing now as we speak. So I think that data is going to be the big driver for technology capabilities, for how the technology is and users are going to interact with each other. And there's so much data out there that we are learning right now how to organize it and how to activate it. And that knowledge is what is going to be used to build the next generation of ecommerce tools.Stephanie:Yes. Love it. When you want to get into the creative mindset, what do you do to get into that-Ivonne:I walk.Stephanie:You walk?Ivonne:I walk in nature. It's very unfortunate what happened to the world in this last year. A lot of people... So really sad consequences but I can tell you in my case I think professionally speaking, it was my best year ever. It was my most creative year, my most productive year because I realized that the way I create is by being close to nature and being with my own thoughts and using that reflecting on things that I talk with people in the industry, things that I read but then going back and retrieve and reflect on those things. And I think definitely, I think that everybody should have that space to let their creative power to work on[inaudible 00:46:44]Stephanie:Yeah. I love that. I feel that I also... Yeah, I get very inspired when I'm just out walking and hiking and yeah, I think that's definitely a way to jumpstart that.Ivonne:Yeah. And I like to, I go on a bike, right now that it's getting warmer here in Texas is biking time again and I think my best ideas come when I'm on the bike or when I'm walking, because you don't have interruptions, you don't have a phone ringing, you don't have texts, you don't have anything. So it's you and your thoughts and the brain is an amazing machine that is processing everything that came in at some point and organizing it and making sense of it and coming up with new outputs.Stephanie:Yes. Yeah. You just have to bike on down to Austin, when you get here, we can go on a hike and we'll be super creative and you'll be really in shape so...Ivonne:Awesome.Stephanie:It'd be great.Ivonne:Love to.Stephanie:If you had a podcast what would it be about and who would your first guest be?Ivonne:That's a hard one. I think it will be definitely something related with technology. It will about disruptive technology and new shield solutions. I don't know exactly it doesn't come to my mind what will be my first guest but I think that I would love to interview a woman in technology. I think it's a field where women are being very successful but it was not until recently that they really had a place on the table in that industry. So it would be very interesting to learn how that has been and how it feels to be one of these top technology companies, preferably if she is a founder of a technology company and see how she leaves and interacts in an industry that only until recently became recognizing female as leader.Stephanie:Yes. That sounds like a good one. I would for sure listen to that. Well, Ivonne, thanks so much for coming on the show. It's been really fun to get a peek into some of your marketing and digital strategies and yeah, it was just really fun feeling like I had a chance to glimpse into the future with you. Where can people find out more about you and Avocados From Mexico?Ivonne:So we, Avocados From Mexico on Twitter is Avos From Mexico and about me, I have the same in Twitter, Instagram, Facebook, LinkedIn is all Ivonne Kinser, I-V-O-N-N-E K-I-N-E-R.Stephanie:Amazing. Thanks so much, Ivonne.Ivonne:Thank you.
The online buying experience is always evolving, so it’s table stakes for companies to be on their toes and ready to adjust when the market tells them to. Especially when the company we are chatting about today was founded in 1948! But being prepared to adjust and actually making it happen are two different things. At DICK’S Sporting Goods, its customers, who are referred to as “athletes” are truly running the show, and Scott Casciato, who serves as the VP of Omni Channel Fulfillment & Athlete Service at DICK'S, is the man who takes their needs and delivers a seamless experience to them via DICK’S ecommerce platform and throughout their 700 retail locations. And with their ecommerce sales increasing by 100% in 2020, Scott and his team have had to rethink many things like: how to scale up operations during peak seasons, why testing every iteration on the website is key, how to perfect the buy online pick up in-store experience, and determine how to take their athlete's feedback and transform it into a funnel for change. This episode brought back a lot of nostalgia for me, thinking about the days of wandering the aisles of Dick’s in my high school days looking for a new lacrosse stick or soccer shoes. So it was fun to hear about how much has changed, and what investments the company has been making lately in creating the best customer experience possible for its athletes. Also, tune in to the end to hear Scott discuss the importance of great vendor relationships, how to future proof logistics, and the new in-store experiences that Dick’s is betting big on. Enjoy! Main Takeaways:The House Don’t Fall When the Bones are Good: Having a strong foundation is the most impactful thing a company can do to prepare for surges in traffic that might come during peak seasons or after highly-successful campaigns. You have to do the work, go through the load tests and constantly be improving the technology stack because there are no shortcuts when you are creating a scalable platform that can withstand anything you throw at it. With last year being a perfect case study to reflect on, dive into the data and pivot if needed so you’re ready for the surge!Bet On It … Then Test It: Building out an online experience that works requires constant testing. You can plan for outcomes and bet on how you think people will react, but until you test it, you can’t ever be certain. As Scott mentioned, following the path the data reveals can be surprising and sometimes opposite of what your intuition is telling you.Experiences For The Future: The shopping experience is going to continue to change, and the strongest companies are planning for the future by paying attention to trends and then creating experiences — both in-person and online — that will drive engagement with consumers and build trust and confidence in the company’s authority in the space. By investing early into an experience or a specific market, you set yourself up as the expert in that specialized vertical and become the retailer of choice for consumers.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey everyone and welcome back to Up Next in Commerce, this is your host, Stephanie Postles, ceo@mission.org. Today on the show we have Scott Casciato, vice president of Omni Channel Fulfillment & Athlete Service at DICK'S Sporting Goods. Scott, welcome.Scott:Thanks for having me. It's great to be here.Stephanie:I'm really excited to have you. So I have this deep love of DICK'S Sporting Goods because there was a location in my hometown, eastern shore of Maryland, which I feel no one even knows where that is on a map. But back in high school, I would go almost every week and just kind of peruse through the aisles and look for new lacrosse sticks and shoes. And I didn't really have much money, but I remember just loving the experience and being there probably for three hours with friends, just kind of hanging out. So I was so excited when I saw you guys on the lineup where I was, "Yes, something I know well."Scott:Was that your sport growing up, lacrosse?Stephanie:Lacrosse and soccer.Scott:Nice, nice. That's great.Stephanie:Deep love there. So I'd love to hear a bit about how you got into this industry, because you had a funny quote where you said, "I don't know how I really ended up here," and I'd love to start there, how did you become the vice-president of Omni Channel Fulfillment & Athlete Service at DICK'S Sporting Goods?Scott:It goes back... I spent the early part of my career in software, supply chain software, and kind of even on the sales side, then moved into the operational side and then got into management consulting and did a tour duty in the management consulting ranks. And I got introduced to the founder and co-founder of a company called ModCloth that I was with previously. And they were looking for somebody to run fulfillment and customer service. And I just said, I don't know anything about, I mean, I know supply chain, but I don't really know anything about direct consumer fulfillment at the time. And the founder of that business was, "Yeah, I know, but you're smart enough to figure it out." Right?Scott:So and I have a bent for really high growth, high speed businesses, and it just kind of the way I grew up in my career and that was a really great opportunity. So I did that and I spent five years there scaling that business really significantly, hyper growth phase and it was awesome. I learned a ton about fulfillment and service. And then about five years in, I had this great opportunity to come to DICK'S. And the thing that was really interesting to me is, the question was how can we build a great service organization for DICK'S Sporting Goods? I'm like, "Wow, if I could do it at a much smaller company, what would it be like to come to such a great brand and try to do it here?" And and we did, right?Scott:And so we spent a lot of time building that for the first four years of my time at DICK'S and then had an opportunity to take fulfillment on. So it's interesting that I have some of the aspects of that, that previous role that I had only, a scale that is much larger and just been very, very fortunate to be with such a great business. And it's been awesome to work with the team at DICK'S.Stephanie:Okay. So you are leaving ModCloth, I mean, that's like strictly ecommerce and then you're coming to this, I would say very omni-channel company. I mean, you have over 700 locations across the US, quickly moving to digital, at least over the past couple of years. Tell me a bit about what that transition was like?Scott:I mean, and at the same time we were really building... We were just starting our transformation to building our own technology. So it was a massive... It was basically rebuilding what we had already had from an ecommerce business perspective. And I think fundamentally a lot of the things that I came in and the tools that I had were relevant, right? How you scale a business. I mean, that stuff is somewhat the same. I think one of the biggest changes was or a few of them were one, just having more teammates that knew a lot of stuff that could really help and drive the initiatives and the progress forward, whereas in a much smaller company, right? It's you're wearing so many different hats and you're doing so many different things here.Scott:It was a shock to me to say, oh, there's somebody that can help with reporting or data analytics and help us with these answers. So that was awesome. And then I just think we were all learning, right? So we were learning what we needed. We were learning what we wanted to be in customer service, we were learning what we wanted to have in terms of digital capabilities. We were learning how to run that business as we were deploying new technology, right? So how do you do pricing online appropriately? I remember a lot of conversation. How do you display things? What's the right... How do you check? What's the right checkout flow? And then we had, as all businesses do, you have to make a lot of trade-offs because it may not be the most elegant thing right at the beginning, but we just got to get it up and running, right?Scott:And so having those conversations can be tough, right? Everybody, and especially our business, we just have this DNA where we just relentlessly improve, right? And so it's tough to launch something and know that it's not the perfect solution, right, and then making sure that you go back and you iterate and you keep going, right? We just did that for a long time. But it was a lot of fun and it's really tiring, but it was a lot of fun.Stephanie:So that's amazing. What was one of the maybe projects or things that you felt most strongly about that you got maybe the most pushback on that people are like, nope, that's not a good idea?Scott:I would say, well, we had a lot of conversation about how we were going to set up, for example, in my world, we were going to set up customer service. And we continue to evolve that. I think it wasn't that people were saying it's not how we want to do it, I think it was really more what I was saying about, we want to own more of that customer service experience, right? So we had always been outsourced. And as we moved, as we did the transition, and our previous outsourcer did a great job. And as we move to the next wave of that evolution, we decided we really need to keep an outsourced view in some form or fashion of customer service, but we really wanted to try to start to build our own, right, because we were, "Wonder what we could do on our own?"Scott:So this conversation about, [inaudible] how do you scale for the hockey stick effect that we have at holiday, right, while maintaining the great experience that we have? And we want to in source, but then we want to scale a holiday. We just had a lot of spirited debate about that. So that was part of that conversation.Stephanie:Very cool. And so are you guys kind of now balanced approach when it comes to customer service, depending on what's incoming and how to route it?Scott:Exactly. Right. So we have a team of internal service people that take various types of contacts, and then we have a few outsourced partners that we work extremely closely with. And we balanced the volume across there. And then at holiday time, we scale up across all. And so it's turned out to be... And we're measuring that experience relentlessly. So it's been a great symbiotic relationship, I think, across all three of those.Stephanie:Well, now that you've touched on holiday, I do kind of want to go into peak season and maybe talking about, I mean, you mentioned that you went through this big technology evolution and implementing new things to try and get to where you are now, what did that look like, especially when it comes to preparing for big surges? I mean, I saw your ecommerce I think went up 100% in 2020 or something, so you guys have had massive growth. What did it look like behind the scenes to prepare for that plus peak demand?Scott:I think it's been this... We're very happy that we started when we did, right? when you think about what happened over the past 12 months and what has happened in the ecommerce world and the growth that everybody has seen, we're fortunate that we started four years ago down this path. Because the foundation that we built really allowed us to scale this year really quickly. We've been through all the load tests dynamics that you go through at holiday, we've built the technology stack that can support the traffic that we knew that we were going to get. We've been through the trials and tribulations of how to test, what to test, where to find the failure modes, and we've got really talented people that work on that stuff every day. We've built controls internally to manage where things might not be working appropriately and to be able to balance that.Scott:And as you think about what happened last year, specifically with curbside, it is the example of, it took us four years to become an overnight success type of situation where [inaudible].Stephanie:[inaudible].Scott:Right.Stephanie:[inaudible]. Who knew?Scott:Totally. So I think it was scaling for holiday. We scale every year for holiday. I think last year was one that we didn't quite know, nobody knew what was really going to happen. But I think we over-prepared, and we executed an extremely successful holiday because we just had every... It was so great to see everybody so engaged in solving that challenge and really thinking through every aspect of what might happen in holiday from fulfillment through the web traffic through customer service. And we really came together as a team and figured out all the ways that things could go right and wrong and covered it all. And we had a great holiday season because of it.Stephanie:That's great. So what areas do you think businesses are maybe under-prepared? Is it in the fulfillment piece? Is it in customer service? What are some of the top pillars that you guys covered down on that maybe some people might not be fully prepared for?Scott:I think that we do a great job in measuring and really paying attention to the athlete experience across all measures, right? I think we've pivoted from, I think historically in most businesses have been in a place where you manage internally, right? You're managing things like conversion or traffic or speed to athlete and things like that, and to be the customer, traditional service levels and customer service. I think those are all important, but I think if you take the outside in view, right, and you're looking at things like how are we measuring the experience, what's happening to that customer when they're out there and they're buying from us? But are they buying from us again, right, as an articulation of their commitment to the brand?Scott:And then how do we influence that purchase behavior? And how do you think expansively about that in terms of not only the shopping experience online that they have, but the post-purchase, the delivery experience, the customer service experience, how are you really measuring that data and getting good information and causal information to figure out how you can drive really great lifetime value? And I think we do that and we're really starting to do that really well across our business. And we've gotten so much support for that outside in view, across our leadership team as well that it's become a real engine of thinking across our teams.Stephanie:I mean, it seems like that holistic view is really hard for a lot of companies to get to though. I mean, I hear about a lot of companies trying to consolidate their tech stack, marketing stack, put it all in one area that things actually are connected and you can have attribution and you can see the LTV. How do you guys think about having that view that allows you to make decisions?Scott:I mean, I think that it's philosophical at some level and don't get me wrong, it's hard because I think when you look at the business on a day-to-day basis, all retailers, right, especially those that are public are driving towards hard goals. We take a much longer term view of things generally across the business, which is really refreshing and great. And so it allows us to really make good decisions. When you think about what we're measuring, how we're investing, we're not investing, I mean, obviously we care about the quarter and we care about the year, right? Don't get me wrong, but I think we're making investments that are in the long-term interest of this brand and our customers. I think, we're a really large small business in that regard. And I think we've been able to energize our teammates to deliver that experience on the front line, but also make the investments on the back end of the house that allow us to do that.Stephanie:And I see you guys have been making some big tech investments. I saw, I think Commerce Hub, you did a multi-year deal with them. And I saw something about the vendor partner program that you have. We can kind of plug and play into a bunch of vendors and have an endless aisle. And I was, wow, that could be game changing to be able to pivot quickly and offer, get to the consumer, right, wherever they are, whatever they need, especially in times right now where it's very uncertain. So it seems tech is a big piece of that, towards that investment philosophy right now.Scott:It is.Stephanie:How are you figuring out what you need and how to put the proper pieces in place?Scott:I think we have over 500 vendors in our drop-ship program. And connecting to it has them, and understanding what the inventory is, and getting them to send us the right inventory, and then order information back and forth in real time is incredibly important, which is why we made the investment in Commerce Hub, it has been a great partner for us for a few years now. And it's easy to use. So I think that's that was great for that aspect of our business. I think our vendor relationships are super strong and we're fortunate that we have them because it allows us to be really creative in the way that we go to market. Scott:And I think we're also continuing to build great brands internally, right? And so if you think about, we just recently launched our first brand and it's been a great success so far. It's great stuff. We had got our [inaudible], if you haven't tried it, you should.Stephanie:I haven't. [inaudible].Scott:That's awesome. It's a partnership that we did with Carrie Underwood about six years ago, and it's quickly become our number two selling women's line.Stephanie:Wow. That's awesome.Scott:And then we launched our DSG brand a few years ago, or a year and a half ago, which is really a value-driven brand and with very high quality, right? So when you think about the continuum of our brands, we have very specific and different strategies and they're complex depending on what we're trying to achieve within a given brand or category within that brand. But I think we're fortunate that we've built such great lasting relationships, because again, I think it gets back to, we take a longer term view of things and we really, I think we treat our vendors as partners.Stephanie:Yep. So key, especially in this industry where so much is happening, so much is changing quick and people can get burned really quickly too.Scott:Right, right, right.Stephanie:It also seems being able to plug into a vendor system like that is important, especially around... It seems a lot of companies are doing private label type of things and launching their own brands. I mean, it's not fully reliant now on the big brands and being able to have that flexibility to pull people into your ecosystem that maybe could have never sold at a DICK'S Sporting Goods before, that seems amazing and really allows access in a way that wasn't here maybe five years ago.Scott:It really does. We're always looking for those bets to make with new and upcoming brands. And our vendor director job channel is a great way to sort of test some of these things. So that's definitely, you hit the nail on the head for us. It's a strategy that we actively have and it's nice because my team who manages that part of our business we'll work with our merchants to say, "What could our strategy be with the supplier or partner X?" Right? Some of these folks are small businesses that can't handle our volumes. So if we buy a little bit more, we can test some of them or we can test it in the vendor direct channel. So it's been a real tool for us.Stephanie:Testing's interesting too. I could see kind of doing AB test quickly and see if people like this product and if they like this one more, okay, here's what we're going to go. Maybe we'll circle back with you next year in a much less risky way to bring people in.Scott:We've gotten really good at testing and specifically on the site with how we're thinking about the experience online. And we test almost everything these days, right? I mean, there's some stuff that I think is just go do things, some go do things that we do. But I think generally speaking, we've really developed a muscle around building an experience and testing it and iterating on it to figure out what's really resonating with the athlete most. So everything from shopping experiences on our site all the way down through the conversion funnel to fulfillment, right? And speed and how we're communicating with our athletes.Scott:So I think we've learned so much, and I'm like constantly reminded when we get these, we all kind of make bets, right, when we launched these tests like what do think's going to happen? And I think I'm wrong so often, it's so important to test.Stephanie:Yep.Scott:Good. Because what you think the consumer is going to do they just don't. And even when you think about surveys, I think there's this everybody lies concept, right? And it's true...Stephanie:And depends on what state they're in or where they're at in the day.Scott:Right, right. So I think it's just so invaluable to us.Stephanie:And we do surveys on the show sometimes just to see who do you want on, and how am I doing? And it's, well, it's depends on probably where that person is, if they're happy, if they're sad, it could be different depending on the place that they're in.Scott:For sure.Stephanie:So what's an example of a test that you ran where you were so sure, you're like this one's going to win, everyone was kind of on board with one scenario winning and then the results come back and everyone's wrong?Scott:That's a good question. We just ran one recently that I did win on, which is the one that was top of mind for me coming into this. Let me talk about that one for a second. So the one we launched on same-day, we're trying to figure out what are our athletes appetite is for same-day services. And we did definitely get a lot of engagement on the test. I kind of thought it was going to be more than it was, but it was still interesting, right? So I think that's something that we're going to continue to have conversation on.Stephanie:They wanted it, the majority of the [inaudible]?Scott:I think they did. It wasn't as much as I would've thought, really.Stephanie:Because that's an interesting one that some people on the show said, people just want to know when it's getting there, they're okay if it's not same day, versus if it's more of a commodity product, you better get it to them the same day. And to kind of seems it depends what it is and how much delayed gratification someone can have on it, it depends, it seems.Scott:Yeah. Some of the tests that I think that we've run that have been less intuitive, I just think how products are set up on the site and how people search, right, and find products like you would think that sometimes when you put the best or most visible sort of notable product of the top search results, that's going to create a better conversion and sometimes it just doesn't, right? So it's really people come in I think with a lot of intent around how they're shopping and sometimes what you think is going to happen just doesn't because I think there's so many different ways that people shop.Stephanie:Yep. How do you think about shifting the website either, from what you learned from last year or when you're approaching peak season, are there certain key elements that you adjust knowing that maybe the consumer's are in a very different mindset than they were at any other time in history probably?Scott:Yeah. I think I can speak more to the way that we think about fulfillment in this regard. I always, I historically had thought, that's another example of what I thought was going to happen. I historically thought that during, for example, Black Friday weekend speed was really important, right? I need it, I want to get it fast. And it turns out that weekend in particular speed is not the most important, getting what you want is the most important, right? So getting the deal is the most important. I think it makes sense because most people are thinking, I've got three or four weeks that this thing can get to me. I'm not super concerned to get it next week, just to make sure that I get it, right?Scott:So that's one that we adjust in terms of making sure that we're really being honest with how we're going to fulfill. Thankfully we've got an extraordinarily resilient fulfillment network and we do really well in speed and but historically had been surprised as we've really measured that one over Black Friday weekend. It's really about getting the deal, not the speed.Stephanie:Versus Christmas when everyone's probably last minute shopping, it's probably opposite.Scott:Very different.Stephanie:Okay.Scott:Very different. And as you get into December and you get through towards the ground cutoffs and you get, depending on what's happening, the speed becomes a real issue. Last year was was nuts. I mean, FedEx was running commercials, right? They talked about the speed or buy early. And we definitely saw a little bit of a shift in terms of how people were thinking about buying.Stephanie:So how are you building up that resilience fulfillment network that you mentioned to be able to basically say I can offer anyone the endless aisle, we have unlimited of these, in one moment and then be, okay, now next month got to go, got to be there in three days or less type of scenario?Scott:I think you mentioned it when we kicked off the show, it was we've got over 700 fulfillment locations when you think about our store network, which is a blessing for us because it allows us to really, not only be closer to our athlete and get things there faster, but also allows for a lot of flexibility when... It's just load balancing, right? When you think about a business that has a couple of three, in my past one fulfillment center, when that thing gets backed up, or you have a labor problem or you have whatever the case, would be trucks that don't show up on the receiving dock or the outgoing dock, you're kind of backed up, right?.Scott:And so while that definitely happens across everybody's network, including ours, having all of these different nodes that are moving product out each and every really helps mitigate the risk. And so it also helps us, at peak time, it helps us staff up and get stuff out. And we have we've built a really sophisticated way to manage the way that orders are routing. So we're able to identify where we might have congestion points, for example, and try to proactively avoid those as we see those things happening, right? So we can move orders to one node or another, or block a node if we've got a weather issue or something, or we've got, in the fall when you have hurricanes in Florida, right, or in the Southeast, we're able to really change the way that our orders route to get product out of different places that aren't having those issues.Stephanie:And is that kind of done in the background where it's looking at all these different inputs and then kind of making decisions that you can come in and adjust if you need to, but it's already routing it for you in the background?Scott:Yeah. So part of it's automated part of it's people, right? And it's still a lot of people, right, washing the switches each day. But we've got a great team of people that are communicating, we're communicating out of our stores to my team and fulfillment. We're communicating from my team into stores and we're using the technology that we've built to really manage the capacity and the inventory across the entire network.Stephanie:It seems that is so important too you when you essentially have two business units when it comes to fulfillment, you've got your store locations with one set of data, inventory is probably very hard to track because it's always getting grabbed, it's always getting shipped out, and then you have just maybe a fulfilment center that's a whole different beast probably. How do you get to that consolidate view? Is that part of the backend tech that's kind of looking at it at a higher level, treating it all as one?Scott:It is and it's definitely complex for the reasons that you noted. And it creates, sometimes it can compromise how close we can get to the athlete if we think we've got a unit in Austin, Texas and we actually don't. The fortunate part is instead of canceling that order on you or that unit on you, it's going to go to maybe it'll go to a Dallas store, right? And we can still stay pretty close to you and get it to you. And we're also trying to look at things like, how do we keep packages together? Of course, anybody that's listening to this that manages freight will say, yep, really important from a cost perspective. And frankly, even from, as I mentioned earlier, that athlete experience, people want to get one box, right? I don't want to order three or four different things and get three or four different boxes. And sometimes that's unavoidable, but we're trying everything we can to not let that happen.Stephanie:Oh, blessing.Scott:Totally, right?Stephanie:I get, one company I'm not going to mention their name, they will send a can of soup, anything a bone broth. I mean, it's in these little bags and they just come one at a time. I'm like, "Oh my gosh, I just would have rather just gone to the store and picked it up myself than getting random of one item at a time."Scott:It's so wonderful when the customer experience need and the business need align, right? So when you think about, nobody wants to ship more packages to you, right? We want to get it to you, we want to get to you fast and we want to get it to you in one package. And that's also a great experience for you. It's the same thing we talk about with customer service, which is a traditional metric that people manage as average handle time, right? How long are [inaudible]? And I'm so careful, we collectively are so careful with this metric because it can be so disastrous to the teammate that's on the other end of the phone if they think they're being managed to a handle time, right? I don't want to just get you off the phone, however, and you need to use it for all kinds of different scheduling and making sure you have enough people on the team.Scott:But what's really aligned is generally people want to get to an answer pretty quickly also, right? I want to have an efficient, valuable use of my time. I want to get to an answer and then I want to move on with my day. So that's another example of where if we can do it right and align those desires, we're going to create an awesome experience.Stephanie:The unintended consequences, pizzas is such a tricky thing with thinking about designing roles and KPIs. I mean, I'm doing it right now. I'm thinking about sales and building a sales team and being like, oh wait, this might incentivize bad behavior.Scott:You got to really think about it, right?Stephanie:You just think really strategically about it.Scott:The outcome or the impact is very different than the intent in some cases.Stephanie:Yep. Are there any external inputs right now that you think companies aren't preparing for? I'm thinking about the algorithms that are kind of running everything behind the scenes when it comes to your fulfillment and things like that. Is there anything that you guys are watching now that maybe you weren't watching a couple of years ago and letting it help influence how things are routed or how things are kind of being redirected, anything like that?Scott:I mean, I think we're constantly trying to get to be more precise, and we're very fortunate that if everything goes right, we can get you an order really, really quickly. So we're really trying to pay attention to, where are things not going perfectly and we've called this thing the perfect order, what's our perfect order, right? And how do we get more of those? So we're spending a lot of time thinking about how we can perfect our fulfillment network. And I mean, it is, as you can imagine, just an infinite number of variables that dictate how this thing goes. But we're working a lot on that. I do not think that...Stephanie:[inaudible] like local stuff, because that's something that kind of came to mind. You're paying attention to weather and higher level things are you down in the weeds of, okay, well there's a festival this week here so that means... Is it that [inaudible].Scott:It can be. I mean, for example, when we're doing a hot market event, so Super Bowl, NCAA Tournament, they're national events, but their inventories largely local, right? So we're really paying attention to what the traffic is doing and the inventory is doing it at those local levels for sure.Stephanie:I'd love to talk about events a bit because I know that's a focus is the athlete experience online and in person as well. And I saw that you guys are opening more retail locations. You're opening, I think I saw a golf center, I soccer center, I mean, these full on experiences. And I'd love to hear how you guys are thinking about that.Scott:I'm glad you mentioned that we're really proud. We just opened recently the House of Sport up in Victor, New York, which is an expression of what we think the future can be for DICK'S Sporting Goods. And it's really an experiential retail location. So you can go in there, obviously we've got golf simulators and we've got fitting in there. We've got rock walls to climb. We've got an outdoor fitness field where we're doing things and we're engaging the community in different ways. So we're running clinics and figuring out how we can get local teams into their... Engaging in the community in this way has been a part of our brand since 1948, right? So I think, if you read the story of DICK'S and how we were involved in the Binghamton New York community, when the business was founded, it'll give you a sense for why this is important to us.Scott:And we just believe that, we say it all the time, we believe that sports makes people better. So how do we think about engaging in the community where we're at? We've done this forever in community marketing, and you see how we donate equipment to local teams and so forth. This is kind of another evolution of that, where we think we can make a big impact, we can change the way that people think about retail. And I think it'll quickly get to how do we merge the online and the brick and mortar or traditional retail experience? So I think that's a place that is really exciting to us right now.Stephanie:I was just thinking about, how do you create, you have a view where you know this person came in to this event and they were using the golf simulator, and they really liked this club. And then they either bought in store or maybe four weeks later they ended up online and bought the one that they were using? Do you feel you're moving in a direction where you're going to have that viewpoint? And it's not a hard time to get there.Scott:Yeah, I think we're getting there. I think we're really focused on data and analytics, right? And so I think our ability to stitch together these experiences, we're building that muscle. I don't think that we're totally there yet, but we've got really smart people that are thinking about this. And I think we're moving in that direction because that's the key. We're not really worried about what channel you buy in, right? I think it's more about, are we the retailer of choice for you, right? And however that experience, the experience that we can build for that, it's important to measure it because then I think it unlocks the investment in the targeted areas that are going to drive more of that for our athletes. So I think that's where we're really focused.Stephanie:Have you thought about creating essentially kind of a guide shop, but you have the soccer experience or something, and then just a small shop where maybe you can look at a few other things, but then essentially you're going back online to order whatever you played with and got to experiment with, or are you doing full on retail location as always, and then often this area we're doing our experience center?Scott:We haven't done really pop up experiences, guide shop experiences like that. We're moving more towards, how do we create a more scaled experiential experience in store and then how do we measure that in terms of who might go online to buy.Stephanie:Mm-hmm (affirmative). I love that. I'm excited to see... I need to visit one of those stores, especially the soccer one. I mean, I don't know what it's going to be happening there, but I want to be there.Stephanie:I want to hear, which I feel you'll have a great answer for is what are you all most excited about right now over the next one to two years? What are you most passionate about?Scott:We're excited about a lot of things. And as usual, we have a very full plate. So I think things that we've already deployed that we'll continue to refine, things like our curbside program or a buy and pickup in store program for online, we're really excited about that. That's got a long runway of improvement, enhancement, and creativity that's going to be placed into that program. We are really excited about this merger of... I'm really excited about the merger of stores and online specifically around becoming a trusted advisor to our athletes. So if you think about the breadth of the teammates that we have, and when you walk into our stores or you talk to our people online, everybody's got a passion, right? Your passion is lacrosse and soccer.Stephanie:Mm-hmm (affirmative).Scott:How do we think about unlocking that potential, right, in terms of then being able to help our customer, whether that customer is buying first player pair of soccer cleats for their son, to getting ready to play club soccer, to getting ready to go off and play soccer at a D1 level or beyond, right? So how do we look at that continuum of expertise and really become that trusted advisor, both online and in our stores? And I think that is incredibly exciting venture. And we do it well today. I think there's an opportunity to do it even better. So we're really excited about that. We're really excited about the assortment, right, that we're going to continue to launch online. I think it's going to be differentiated. I think it's going to keep our position in the market really strong.Scott:So I think the product that we put in there, the expertise that we put in there is going to be differentiated in the market, right? And that I think is probably more incremental and more incremental expression to the core business. And then we're going to continue to press. Game Changer has been a great business for us for years. And that team is great. And they continue to build a technology that service the baseball market. But we're always looking for different ways that we can expand or innovate across the industry.Stephanie:I love that, you know what? We need like, what do you do after college? I always think about that and I'm like, I loved playing sports. But then you start working, and then you have kids, and then you're, I still want to play, but how do I get back into it? And something is missing there, Scott. [inaudible].Scott:No, but I love... So that's who we want. That's another sort of persona that we really want to love to serve in our stores. Because I'm one of them.Stephanie:I'm your person.Scott:Right.Stephanie:We're the people.Scott:We're the people. And I think what we want to be able to do, I love talking about this. I think in our stores and online, our ability to listen and inspire, right, how do we help you meet that goal, right? "Hey, I'm doing a couch to 5k first time. I'm starting to get active." Or, for me, the 5'8 guy that always had a dream of the NBA that never came to fruition because my vertical is about that high. I still play. I want to make sure that I can get all the gear that I need to be competitive, right, or to achieve my personal best.Scott:So I love the fact that we can really positively impact people's lives in that way. And I think we want to make... I would love to make sure personally that anybody that walks into our store and knows that we're not just a sporting goods retailer, right? I think we want to make sure that we're helping, we want to facilitate you achieving your dreams. And then we talk a lot about that internally. So if we can translate or transmit that feeling to our athletes, I think that's really powerful.Stephanie:And also makes me think about creating custom leagues too, where it's, this is a different kind of league. It's not the traditional school. It's not even people creating their own volleyball leagues. It's we are a part of this. We're making sure that this can happen for people who struggle to even find those networks. I mean, I know back when I was in DC, I looked for where's some other women who play lacrosse? I don't really want to play with guys who are going to be checking me and I count find it, super hard to find. I mean, it's easy to find some sports in a community setting, but it's very hard to find people in certain other sports settings.Scott:You're right. There's a social, I don't want to, careful to say social network, but there is this idea of how do I plug into people that are me within a certain geographical area, right? That would be interesting. That's really interesting. Thanks for that one. Let me...Stephanie:Take it back to leadership. We just need a parenting kit. It's, here's everything you need so that we can go play our sports and then your kids are entertained. They get many lacrosse sticks. You go there and then I'll go off on my own so I can actually play, give me the kid.Scott:I love that idea.Stephanie:I want to think like such parents. Anyone who's not a parent is probably, "What are y'all talking about right now?"Scott:What are you talking about? Yep.Stephanie:Yep. All right. So let's shift over to the lightning round. Lightning round is brought to you by Salesforce Commerce Cloud. This is where I ask a question and you have a minute or less to answer. Are you ready?Scott:I think so.Stephanie:Okay. So I'm sad, I haven't asked this yet and don't know this, but what is your favorite sport?Scott:Basketball.Stephanie:Oh, nice.Stephanie:And who's your favorite sports team?Scott:It's always been the Chicago Bulls since back in the day, which is probably blasted me because I live in Pittsburgh. So to not say football and the Pittsburgh Steelers is a problem.Stephanie:You'd probably get egged.Scott:Probably. But they're close second.Stephanie:That's good. What is the nicest thing anyone's done for you?Scott:Oh, wow. I'm going to struggle. I'm going to go to my kids. I think my kids being, this is going to sound so cheesy, but it's so serious. The way that my kids treat other people with respect and kindness, I think is the thing that comes to mind for me first. And I know that's probably not the answer that you would normally get.Stephanie:Nope, I like it.Scott:To me that's pretty important. So I'm really proud of them. And I think that's probably the best thing that somebody could do for me.Stephanie:I love that. There's so much you can learn from kids. I think about that all the time. So I'm the person who is here for those cheesy kind of kid answers. You're in the right space. What's one thing you don't know that you wish you understood better?Scott:American history comes to mind?Stephanie:That's a good one.Scott:I don't think that's on topic, but that's the first one that comes to mind.Stephanie:When you want to feel more joy, what do you do?Scott:It's going to sound crazy. I tell people, thank you.Stephanie:Mm-hmm (affirmative).Scott:Right. So I just believe that there's a lot... I get a lot of energy from being grateful, right? And so that's what I do. If I'm really feeling a little down or if I'm really stressed or some of the times the way that I work out and I get the endorphins mode going, that's one way to do it, and the other way is to be grateful for things. So I feel that's the way I get a lot of energy.Stephanie:I love that. All right. And then the last one, I mean, it seems you guys are very much ahead on a lot of things within the ecosystem. What do you do to stay on top of the trends? Are you watching other companies? Are you reading things, what are you doing to stay on top?Scott:I think it's a combination of experiencing and reading. I don't read nearly enough, it's hard, right? There's so much the content that comes out and not enough time. So I'm trying to just experience things out in the wild right? I'm talking to a lot of people, whether it's parents at a game or if it's just my own experiences online, and I'm trying to translate that to what's happening and why companies would do things a certain way. And then my team is doing the same thing. So I think we're trying to stay close. We're trying to stay close that way and certainly reading and engaging in conversations like this also kind of help.Stephanie:Good. That's awesome. Well, cool. Well, Scott, thank you so much for joining us. It was really fun to hear all about what you guys are up to. Where can people find more about DICK'S Sporting Goods and find you?Scott:I think www.dickssportinggoods.com. For the story of Public Lands and Golf Galaxy, and you can find me at LinkedIn, on LinkedIn.Stephanie:Amazing. Thank you so much.Scott:Thank you so much for having me. It's been a great time.
It seems like selling a product that is designed to make you feel good should be a cake walk. But as we all know, business is never easy, especially when you’re breaking into the supplement and nutritional bar space, which is overcrowded with industry giants such as Clif bars and KIND. So what’s an upstart company with a solid product and good intentions to do?On this episode of Up Next in Commerce, we found out when we talked to Chris Bernard, the co-founder, CEO and Chief Mood Officer for Mindright, the good mood superfood. As it turns out, there are a few ways that a small new company can make a splash, especially in the digital space. Chris explains how organic reach outs and authentic connections formed through his partnership with Rob Dyrdek has helped Mindright create an influencer and ambassador community that wins against influencer fatigue. Plus Chris, he digs into why a content strategy that blends humor and education is what gets the attention of the digital audience. Enjoy this episode.Main Takeaways:Be Serious… But Have A Laugh: Fun and funny content is a great way to build a relationship with consumers and to sell the lifestyle that you want your brand to be about. But you also have to balance real education and sales tactics into your content along with the comedic elements so that customers can get the full picture of what a brand is, why they should buy it, and to convince them to complete the purchase.Can I Get A Sample?: Free samples used to be a staple at grocery stores and markets everywhere, and those samples were a key way that new companies created buy-in with potential customers. Now that the industry has shifted away from that model, finding a new way to hyper-target customers with influencers, deals, and content is the best way to bring customers into the fold.Influencer Fatigue: Consumers are wise to the influencer strategy these days, and their fatigue is real when it comes to consuming influencer content. In order for brands to fight that fatigue and win engagement, building buzz around future products rather than current offerings is one of the best ways to do it.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey, everyone and welcome back to Up Next In Commerce. This is your host, Stephanie Postles, CEO at mission.org. Today on the show we have Chris Bernard, the co-founder and CEO and Chief Mood Officer at Mindright. Chris, welcome to the show.Chris:Thank you for having me. Appreciate it.Stephanie:It's good to have you. Would you rather have me call you Bernie? Which one do you want?Chris:My friends and my coworkers call me Bernie, but whatever you're comfortable with.Stephanie:I'm your friend.Chris:Okay, call me Bernie.Stephanie:All right. I like it. So in the beginning, I like to always hear about your background, your journey and how you got to Mindright. So maybe if we could start there. What did you do before Mindright, we'd like to hear.Chris:What I did before Mindright was I was in action sports for a little over 15 years. I represented brands like Burton Snowboards in their sales and marketing channels as an independent contractor. I left that business in 2015 and I invested in a company called, Buff Bake which was protein snacks and protein cookies, nut butters and I came on board with them as part of that investment as the CEO and I helped them run that company for a few years until I was ready to try something new and had an idea and ended up launching this Mindright.Stephanie:So did you have the idea for Mindright right after Buff Bake or was there something in between there?Chris:It was something in between and it just evolved very quickly into what it is today.Stephanie:Okay. What was your original idea? And then what is it today?Chris:Vegan cookie dough.Stephanie:Well that sounds good. I dig that.Chris:It was okay. It wasn't great and that's why I kept it out of the vine and I think we'll probably get into it. But one of the things that dismissed the idea was it really for me, I was looking for something condition specific. Functional foods are really driving the category right now and it's all about condition specific. Foods that drive beauty from within, through collagen, immune support, sleep support.Chris:It's really how we came to Mindright. We started to see this trend in supplements and when you're looking for trends that are going to be shifting to food and beverage, you always start with supplements and you see this rise of adaptogens and nootropics and brain supplements and anti-aging and it's just skyrocketing growth in supplements. It was this idea of how do we support our lifestyle through our mindset, our long hours, our drive, our energy levels through ingredients that support cognitive function. And that's where we started was this idea of cognitive food support and I came to my partner with this idea, he absolutely loved it. At the time the working name was Feed Your Brain.Stephanie:Cool. I like that name.Chris:And it was just really focused on brain health.Stephanie:Do you have a background in this world? How would you even know? When I'm thinking about brain health, I'm like, "Feels like there's so many things. I should be doing facial or I should be doing this. I should be doing so many things." Did you have a background in this where you already knew this makes me feel good? Or did you have to learn all about it?Chris:No, I just knew I wasn't feeling good. I always feel this brain fog and slow and besides this fact that you just hit 40, things start to slow down a little bit and you're looking for ways to support your lifestyle and just keep your edge and just keep moving forward and you start researching and there's a lot of great information around brain health, mental wellbeing, nutrition and other things that support those functions.Stephanie:Okay. And so what were some of the ingredients that you started finding that you're like, "We need to have this in some kind of bar."Chris:It was like lion's mane, Gingko biloba, both of which didn't make the cut at the end.Stephanie:Oh, how come?Chris:Well this is where I was going was, as we started with Brain Health, my partner who is a very big advocate of testing and research pushed to really go out and survey a group around 350 people. And while cognitive function was important to them, what indexed the highest was, "Do you have foods and ingredients that help me feel good? Happy, good mood. I want to be focused and feeling good." And this theme of feel good, just kept popping up and popping up and we took a step back and it was indexed so high. Like, "Why don't we just lean into good mood?" We've got a set of ingredients. We've got some data behind some of the ingredients we're using to really support enhancing your mood, decreasing your stress and giving you energy. All the things you need to feel good. So we need to do it. And that's how Good Mood Superfood was born.Stephanie:Cool. And did you always know that it would turn into a bar or did you have other thoughts early on?Chris:We had many thoughts and we still have many thoughts. This was our way of really standing up the brand, getting a feel for our branding, our message, bars is just the starting point. We have a really dynamic innovation pipeline of other snacks, drink blends, hydration drink. Things that will help support other areas of brain health.Stephanie:Very cool. So let's talk a bit about your partner and how that working relationship is and how you even landed him as your partner.Chris:So I was introduced to Rob Dyrdek, legendary TV personality, former skateboard, a professional athlete. Rob has a show on MTV right now called Ridiculousness. I grew up watching his other shows, Rob & Big and Fantasy Factory, as many of us did.Stephanie:Rob & Big, that's a good show.Chris:It was amazing. So then we just look forward to every week watching. He's just such a character and dynamic human being. But what people don't know is he runs a really diverse, exciting venture creation studio. He refers to himself and the people around him as do or diers, people that are interested in investing in themselves, growing businesses from the idea stage to the exit. And he's invested in several brands, primarily at the startup stage. And when I came to him, I was in the transition period in my life. I didn't know why I was meeting him.Chris:I was going to go in and just introduce myself. And I brought Buff Bake with me just in case he was interested in investing because always looking for investors and he made me tell him my life story from the day I was born until the day I ended up sitting in the chair in front of him.Stephanie:Wow. I should have done that.Chris:It's not that interesting. But he really liked it. And I spent 55 of my 60 minutes talking about myself and then he's like, "Okay. So what's up with these cookies? What's up with this Buff Bake? He's like, "Okay. Those are really good. I like them but I really like you. If you have some ideas or you want to do something, come back and let's talk about it."Chris:I left and I got a call two weeks later from him, wanted me to come back again. Again, didn't really know why I was going there. He wanted to pitch me on some ideas. And it just flew over my head. I went home, I called his COO and I was like, "What's he looking for?" He wanted an idea from me. He wanted to work on something. So I had been in the background working on these cognitive ingredients, paired with superfoods and brought it back to him as a whole package. I came in with fully developed samples around bars and coffee creamers and bites to really articulate what this could look like. And he was so excited about the presentation. He just sealed the deal with me on the spot and we were off to the races.Stephanie:That's amazing. What does the partnership look like with him? How's he involved?Chris:He is very, very involved. He wants to be very involved in the creative process, but also through all the funding, the financial rounds, building the infrastructure of the company. He has built a really strong team around him. Managing the finance arm, managing the marketing project teams. So it's an extension of my team. We are true co-founders, he's very, very involved in the business and he and I are either working together on the daily basis or he and his team are fully integrated in.Stephanie:That's really cool. And it seems like once you get access to him and then you had his network, it brings in other investors as well.Chris:Yeah. So that's the next thing that happened. So we stand this thing up and we start to go out to bring in some strategic capital to help push things along. We started with some traditional resources and private equity and some strategics within the space. And then we started talking to his network a little bit and all of a sudden we saw how excited they were and one conversation led to the next, led to the next, the next thing you know it's Marcus Lemonus from the profits. Jonas was extremely excited about the project. He now sits on the board with myself and Rob. Joe brought his brothers on as well. Jordan McGraw, Travis Barker, Ken Roxanne. It's just this star-studded list of really great mindset celebrities and athletes. Very, very exciting.Stephanie:It seems like you have your own portfolio of influencers. You can get the word out there. While most people you're trying to even think about, "How do I even tap into one of those?" You've got this whole little Rolodex just working for you.Chris:Right. So it's exciting. I think that being able to have that leverage and that advantage really puts us in a unique position to tell the story.Stephanie:Awesome. So tell me a bit about, you said that you were getting samples when you were going to go and show him what you could do. What did that process look like? Because to me thinking about even making any kind of food and then getting the packaging and then getting ingredients that maybe some people aren't the most comfortable with. If you hear some of the words you'd be like, "Well, what is that like? Is that even safe?" Tell me what that process looked like to even find someone who could make the bar that you wanted to taste good and have all that ready for the sample day.Chris:It's funny. You start with the manufacturers. Every manufacturer has a food scientist, R&D, most of them do. Food scientists and R&D department. And most of the time, if they're excited about your project, they will help your R&D. It comes with strings attached and not always do you end up owning your IP, which is important if you're interested in exiting your company at some point, but you learn the process of what goes into R&D products.Chris:And I came in, you come in with a brief and your core tenants for, "These are the ingredients that I would like to use as superfoods. These are the outputs that we'd like to achieve, enhance mood, stress, energy. These are the functional ingredients we're thinking about." And then you work with the ingredient suppliers to understand efficacy and transparency around their ingredients. And you let these guys do their job and you like what you like and you don't when you don't. And I think we did about 13 rounds of this bar until we landed in a place that we felt really good about.Stephanie:That wasn't just you testing it or were there other people trying it?Chris:It was Rob and the entire team. His close team is a team of five.Stephanie:That is awesome. What kind of lessons did you learn when going through that process? Anything that you would maybe do different?Chris:Well, I'll tell you one thing. We tried to be everything but the kitchen sink. We wanted to be keto, we wanted to be paleo, we wanted to be zero sugar. We wanted to be everything. Vegan, dairy-free, gluten-free and have functional ingredients that support incredible, feel, good vibes and decrease your stress. And we were realistic that not all of that was going to work and our guiding light really became taste. If it doesn't taste good, I don't care if it has all those things, it's just not going to work for us. So we planted a flag and it was about taste. And we want this thing that tastes good. And if it has five or six or seven grams of sugar, we use a coconut Palm sugar, which we felt really good about. It was therapeutic. It was like, "Okay, great. We don't have to use sugar, alcohol, or stevia or erythritol or anything. We're going to use coconut Palm sugar. It's a low-glycemic sugar. It tastes great. The bar still has 50% less sugar than an RXBAR or competitor. And we felt really great about that.Stephanie:That's awesome. How do you view the landscape right now? Because I know when I go into certain grocery stores, I'm like, "Wow, there's so many bars." There's the original type RXBARS but now it feels like there's so many offshoots. Everyone's trying to do lower sugar. Maybe not what you're doing, but how do you make sure that you're staying ahead of them and also differentiating yourself where people are like, "Oh, obviously we can see why they're different than all these other bars."Chris:I think again, it came down to taste, great amount of protein, our base values of, it is plant-based vegan, it is dairy free, it is protein packed and low sugar were really important to us. But I think we'll continue to stand out with what our functional message around supporting mood through these super foods and ingredients. And we are just sticking with that.Stephanie:How do you get in front of new people though? I'm thinking about back in the day, samples where you're like, "Oh, I would never have thought to buy that, but now I can see it's healthy for me and good." How do you approach that now trying to get in front of new people and have them try it for the first time?Chris:It's difficult, especially through a global pandemic of people at home and not having opportunities sample in the markets or elsewhere. And for us, it's just leaning into our influencers, our investment community, paid ads, really important. Finding unique ways to drive trial, pinpointing and targeting specific communities. It'd be really great to be everything to everyone but if we could just focus on this core group that's committed to their mindset. They're coaches, they're hustlers, they're the boss, they're the mom and they're focused on what it takes for them to be successful every day. We call them the happy hustlers. That's where we're starting. Our initial reaction was the right one. They're really resonating with the product. They're speaking about the product for us organically. And we're just going to continue to focus on that community right now. And then it'll just hopefully grow from there.Stephanie:It also seems like you have a really good idea around your social presence and how you want to present yourself. It's like a fun whimsical looking, at least your Instagram feed and it's not overly product driven, but it's more selling the lifestyle behind it which I really liked.Chris:Exactly. That's exactly right. And that's what's resonated the most is people are realizing that Mindright is a lifestyle. It's not just about the products. We want to support you beyond that. And as you'll see over the next couple months, we're really going to lean into what it takes to have a better mood, to put the work into your mental wellbeing and really drive home this good mood movement. And being approachable and fun, makes it just easier to pay attention and watch and fun and funny is part of feeling good. And that's the message that we want out there.Stephanie:It sounds like your content strategy you're about to ramp up around those areas. How are you going to keep it balanced between educational, which I feel like a lot of people need education around the ingredients and why they're added and how they need to be mixed together and then the other side around even outside of the product. Like you said, just good mood and how to feel happy and mindfulness and it's like a whole different business over there. How are you thinking about balancing that and connecting with the right audience?Chris:It's just that. It's balancing, trying different things. It's balancing being funny with incorporating lifestyle and people enjoying the product. You're going to just start to see more direct response and testimonials. We are looking to partner with therapy based apps and other entities that help make mental health and wellness really accessible. We're going to have our investment team and our influencers talking about the work that it takes to get Mindright. It's not just, this bar is not going to solve your problems, it's not. But if you focus on your nutrition and you incorporate things like the importance of sleep and getting exercise and some type of a meditation routine, all of these things combined bring you to that next place.Stephanie:Yep. Yeah. It's not just try one thing and all of a sudden everything will be solved, like many things and there's no magic potion.Chris:I think that that's where other companies that are trying, mood or all of these other cognitive functional ingredients, they could fall short because they're making it just about that. And I think that we'll go along for the ride and we'll be there to support our customers along the way.Stephanie:That's great. So you just mentioned influencers. I'm going to go and I want to hear how you view working with influencers because we've had quite a few brands on the show and they talked about it. Some people, amazing experiences if you find the right person who is all in, it's not just sharing a quick message of like, "Here's my teeth whitener and it works great for me go buy it." Versus maybe the ones that are really in they're even part the product development. How do you view a good working relationship with influencers? And more than one, since you have many that you have to balance.Chris:I think for us, it's about being authentic. If it's not something you enjoy and you truly believe in it comes through. You see it and you feel it. And I think having our influencers part of our ambassador program, which we're just at the early stages of building out, is a really important part around building the authenticity of their message. Our influencer program is very small right now, we're still identifying how they're speaking about the brand and what are the best ways to do that. But what we've gotten so far comes from a really organic place. We haven't paid for any influencers yet. All organic because people are enjoying the product and sharing the message with their community.Stephanie:Are you sending them free samples or is it more your investors giving it to their friends who are other influencers probably. And then it's organically happening through that way?Chris:A little bit of both. We identified people that live within our community that we would like to target and say, "Hey, we'd love your feedback. No expectations. You don't need to post. We just ask you tell us how you enjoyed the product. How'd you feel? What do you think about the packaging?" And then it just happens organically.Stephanie:How do you view the longterm strategy around influencers? Because sometimes it feels like they'll have this excitement and a big blip where their network sees it. And then there's maybe diminishing returns and people are either hit over the head with it too much. Or like, "I bought it. It's good." Or the person's not as excited anymore as they were maybe in month one. How do you keep them engaged or be like, "Okay. We're kind of good for now."Chris:We see that fatigue all the time. And I think for us, it's the excitement around what's coming. It's creating community around the lifestyle and the future launch of our new products. The bar is here today. It might not be here in three years from now. It's about continuing to evolve and supporting our needs today.Stephanie:Makes sense. So tell me a bit more about this ambassador program that you're building.Chris:We're at the early stages where we're leaning into this mindset community from happy hustlers. We have three investors on the team that live and breathe in that space. And that's Chris and Lori Harder, their lifestyle coaches and then Lewis Howes who also has a podcast, The School of Greatness. And just really leaning into what they do and how they do it and their communities coming to us and we're setting them up and they're incentivized by product. One of the angles that we're working on right now is charity. When they post, we will support a soon to be identified a mental health charity with an investment.Stephanie:When they're posting about the bar or the company, something like that, then it's like, "Okay, that's a point towards this charity or effect."Chris:Exactly. Those are the early stages. We're still in development. It's still being worked out. We're less than two months old in the market, so we're close.Stephanie:Are there other ambassador programs that you look at where you're maybe taking some key learnings from where you're like, "I know this one works well and I want to implement some of those strategies into Mindright as well."Chris:Yes. A lot of them are custom built though. There's a lot of really great app solutions that work really well and incentivize through product or discount or payment. We want to try to be more organic. I've seen some great custom ones that are gamified, that built community around this excitement around this app itself and the message. So work in progress.Stephanie:That'd be cool to circle back and hear what you ended up building and how it's working and the results. So tell me about your distribution strategy and where you're thinking about selling. Are you on Amazon? Is it just your website and how do you think about where you actually want your bars to be sold right now?Chris:It's everything digitally native. So we are alive on our website getmindright.com. We're on Amazon. We're looking at a various array of subscription box companies. But the really big one right now is all of the delivery convenience guys. So this new evolution of convenience, prime is not good enough. It can't be there the next day. It needs to be there in 20 minutes. So we're looking at partnerships with goPuff, FastAF, Dot. We're in the process of vetting those guys out right now and seeing which one makes the most sense. And I think that can meet format. It's just growing and exploding right now. Through COVID people were forced to adapt to Amazon and delivery service and it's here to stay. It's here to stay. Those conveniences will never change.Stephanie:Are you worried about maybe your brand and the story not being told correctly when you're starting to have many outlets for your products going out and you can't fully control the messaging or?Chris:Yeah. I think that's why picking the right partner for these delivery services is key because we want to make sure that we have the ability to tell a story, whether it's this big or in a banner. It's really partnering with the right team to help make that happen. And then we have a lot of work to do on our end. And I think that our community will help push people to these services. Amazon, getmindright, goPuff, that's where we go and they'll really rely on on that. It's challenging.Stephanie:Yeah, no. Especially when you have so many different people you're vetting right now and thinking about all of the control that you could be losing but also all the access that you're going to be gaining. It's tricky. Because this is a commerce show, I want to hear about your ecommerce strategy around what's working. What do you think that you're doing on your website that maybe is unique and others haven't tried out yet or that you're like, "This is a good tip that more people need to know about."Chris:I think it being less templated and more just an experience where it just feels fun. It makes you dive a little bit deeper to find out what's going on. What works for some people doesn't always work for others and I think this format is working well for us right now.Stephanie:Do you find yourself being able to look back at maybe your experiences at Burton and other places and pulling some lessons from there? Or is it such a different market that you're like, "That probably wouldn't work for this product."Chris:I think it's very similar. I think at the end of the day, you're selling an item that you're passionate and excited about and what is the best way to share that with your friends or your customers? It's very similar in that sense.Stephanie:Yeah. That's cool. So where do you guys want to be in one to three years? What are you hoping to achieve?Chris:We're looking to achieve this just amazing platform of good mood foods that span across really great retailers, Whole Foods, all the natural channels. It would be really great to see it everywhere obviously, but this really accessible approach to foods that help support your mood.Stephanie:Have you started talking to Whole Foods and other retailers like that?Chris:We've had some early conversations, but we really want to stay firm on this digitally native approach. I think that one thing that I'll add is testing is worth spending money on. Just test landing pages, AB testing, digital testing, customer testing. It has opened my eyes to this completely different world. And it is a true science. And when you understand that word that works, that picture that works, that landing page that just converted, it's a science. And then you can continue to really invest towards those things that are working because you know there's turn on that.Stephanie:Yeah. I agree. What is a finding that maybe came out of some of those tests where you were like, "We would have never changed this, changed the product, change the website, but now that so many people are saying this, we're definitely moving forward with that.Chris:I would go back to the beginning where Rob and I, Mindright. There was two different names before Mindright. And now I look back, I'm like, "Neither of those would have worked. Mindright should have always been number one." We tested Mindright. Mindright worked really well but We wanted to brand the ingredients themselves. And we were like the unstoppable blend. We're unstoppable. This mentality of you cannot be stopped, masculine. And we were so sure of it and it failed miserably.Stephanie:They were like, "I don't like that."Chris:No, no. So now at the happy brain blend.Stephanie:That makes me feel happy. That's more on brand.Chris:Yeah. And then from that moment on we're like, "That's our guiding light." It makes me feel happy. Does it? Yes Or no. Okay. It's in.Stephanie:And how are you doing these tests? How are you going about trying to get this feedback? Are they surveys or what are you all doing behind the scenes?Chris:Yeah. Surveys. Right now, we've moved to more surveys. We're surveying around our current database of growing email subscriptions and then we're going to start doing some stuff through Instagram, social media. But the original testing went through a market research firm.Stephanie:All right. Well, let's shift over to the lightning round. The lightning round is brought to you by Salesforce Commerce Cloud. This is where I ask a question and you have a minute or less to answer. Are you ready?Chris:No.Stephanie:Nope. Be right back. Need to go get some more tea. Get In the right mood here. All right. Well, we will move on anyways. If you had a podcast, what would it be about and who would your first guest be?Chris:Oh my gosh. My podcast would be about thinking big. My whole life I never thought big. I thought pretty small and I put roadblocks up in front of myself and I think that now as I sit on a board with Rob Dyrdek and Joe Jonas, literally anything is possible and it would be about stories and ways to help open up your mind to anything is really possible. And I think as cheesy as that sounds, it really is. And I feel like here in my home with my kids and now that we're talking about getting Mindright and this positive growth mindset and to hear them talking about it, it's a real thing. I don't have a title yet. I'll let you name the podcast.Stephanie:There you go. I'll help you name it. Who would you bring on for your first guest?Chris:I bring in Rob. He is an amazing person to talk to about all of this stuff. His mindset is just next level with what he does to keep his energy and his success where it is. It's remarkable.Stephanie:Awesome. What does your mindfulness practice look like?Chris:I'm sorry.Stephanie:What does your mindfulness practice look like? How do you stay centered and balanced and not getting pulled everywhere when doing a startup?Chris:I think for me, I committed to getting up early every morning. I have to be up by 5:00,5:15 or else I can't do the things that I want to do for myself, which is exercise or just have a moment of meditation. Whether it's a minute or five minutes or 20 minutes. I try to do that every morning. I have four kids so life is really hard sometimes. Here they are.Stephanie:I feel that.Chris:So it's get up early, it's a few minutes of meditating and just understanding where I'm at and being really grateful for that. Exercise, 30 minutes. That is my non-negotiable. I have to get 30 minutes in, if I don't my day is just off and once in a blue moon we have a sauna that was gifted to us by-Stephanie:Wow.Chris:It was miracle. That's another podcast.Stephanie:Yeah. Okay. I want that friend. Gift me a sauna.Chris:It was some local guy just giving it away. He was moving.Stephanie:What area of California do you live in because I don't know about many local areas being like, "Here's a sauna. Do you want ice staff as well?"Chris:I'm on the hunt for one of those. So, if you know one. I started fasting, so I intermittent fast. I don't eat my first meal until 12:00 or 1:00. And I found it's really helped with inflammation and energy and I feel great. I also stop thinking through COVID I just-Stephanie:So impressive.Chris:30 days and then you felt great and 60 days, I'm like, "Wow, I feel awesome." And it just stuck.Stephanie:All right. Last question. Two more questions. What's one thing that you don't understand today that you wish you did?Chris:What don't I understand. I don't understand a lot of things let's be honest.Stephanie:Good answer. Just everything. Lots of things.Chris:No. I think for me, part of the reason why we're starting digitally native is almost a personal challenge to myself. I know retail really well, I know relationships, building brands, building distribution, working with brokers. I don't understand digital that well. And it can be frustrating at times because the learning curve is pretty steep and it's always changing every day because you're learning something new and I think digital marketing I don't know very well.Stephanie:Well, you'll be learning it with this company. So that's great.Chris:It'd be great to hire the right people to help you.Stephanie:Mm-hmm (affirmative). Yeah. 1,000% to that one. All right. And then the last one, what one thing will have the biggest impact on ecommerce in the next year?Chris:I think it's these convenience delivery guys. I think they're going to change the game for a lot of people. FastAF is a really good example of what's happening with commerce outside of food and beverage, because they're delivering unique gifts. You need a gift and you're going to a party in an hour, they'll be there in 20 minutes with this beautiful candle or gift item which is just changing the way that we do everything.Stephanie:Yeah. Oh, I completely agree. All right. Well, this has been such a blast. I feel like my mind is really in the right place now after this interview. Where can people find out more about you and Mindright?Chris:Check us out at getmindright.com or on Amazon.Stephanie:All right. Cool. Well, thanks so much for coming on the show.Chris:I really appreciate it. Thanks so much.
Taking a company from $1 million to $100 million is no easy feat — especially when you have competition and copy cats coming at you from all angles. But Peak Design has fought off all those knock-offs — including a pretty blatant rip-off from AmazonBasics — and it has done it with humor and panache, which has only endeared the company more to its loyal customer base. Those customers are what took Peak Design from a simple camera utility bag company and turned it into a popular everyday bag and accessories outfitter for photography enthusiasts. Peak Design leaned into the idea of having a close relationship with its customers from the very beginning, by letting their customers have a say in their product line by way of crowdfunding and Kickstarter campaigns. And that, according to Elish Patel, the VP of Growth and Digital at Peak Design, has made all the difference. On this episode of Up Next in Commerce, Elish explains how building that loyal customer base has helped the company stave off the blatant and more subtle competitors. And Elish talks about how Peak Design is using unique marketing and content strategies to take people from browsing to buying. Enjoy this episode! Main Takeaways:It Speaks For Itself: Although Peak Design went toe-to-toe with Amazon after it knocked off a Peak Design product, more often than not, Peak Design lets its products speak for themselves against the competition. If your products are truly superior in quality and the value they offer, consumers will recognize that and make the investment. And when they buy the better product and see its superiority, they become more loyal to that brand long-term.Products Over People?: Hiring good talent is important, but you don’t want to prioritize growing your headcount over maintaining a laser focus on creating a good product. When you scale up your headcount, it’s easy to be distracted by the new focus on managing a large team and therefore your product design and development process can suffer. By relying on third parties and vendors or partners to do work you could otherwise hire internally, you are left with a core team who can focus on the part of your business that is truly important.More Than An Impression: With your marketing and content, the goal should be to achieve more than an impression or a like. Especially with a smaller or niche brand, being a part of the conversation your consumers are having on places like Reddit and TikTok is worth more than getting an influencer to post a picture with one of your products.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Welcome everyone to Up Next in Commerce. I'm your host, Stephanie Postles, CEO at Mission.org. Today on the show, we have Elish, Patel who currently serves as the VP of Digital and Growth Strategy at Peak Design. Elish, welcome.Elish:Thank you. Nice to be here.Stephanie:Yeah. I'm really excited to catch you before you journey into the redwoods to get some content for your company. I was hoping we can just dive right into Peak Design because your story is super fascinating. Right before this, you were talking about how when you came in, it was a sub $1 million company. Now it's at almost 100 million?Elish:We definitely had a positive in that we did somewhere around 70 last year and we're hoping to grow to that the hundred soon. So yeah, we're coming right up against it.Stephanie:Okay. I mean, that's an amazing story. That's why I was like, "We need to start there. I don't want to run out of time." Can you tell me a bit about what is Peak Design and how long have you been there, and a little bit about that journey?Elish:Yeah. I've been with Peak Design for about six and a half years. I met Peter Dering, our founder and CEO in a bar in Berkeley after a concert. We just sort of hit it off. So it was one of those-Stephanie:What concert?Elish:It was an Alt-J concert at the Berkeley Greek. It was one of those classic Silicon Valley chance meetings. I was doing marketing consulting in the Bay Area at the time and he needed a little bit of help on the digital side. A little bit about Peak design. Peter Dering had this idea of a camera accessory basically to hold your camera on the outside of your body, usually on a backpack shop or your belt while you're doing some more strenuous activities, whether you're hiking, biking, stuff like that, so you could get to your camera easily instead of it being tucked inside your bag and you would miss that shot, as we say.Elish:He got lucky, if you will, the universe aligned in that was the early days in 2010 of Kickstarter. He was just going to find someone to make it and try to get it into stores. But someone was like, "Hey, why don't you do a Kickstarter?" Put it on Kickstarter. Some people found it, wrote a story on it. I think it was in Gadget or something like that, and it blew up. He did 300-something thousand dollars on Kickstarter that year. It was something the third biggest Kickstarter. Again, early days of Kickstarter. There's now crazy ones.Elish:That was the birth of Peak Design. From there, it deepened into the Kickstarter and photography product world. We became one of the first companies to do a second Kickstarter. That's how we started just launching products on Kickstarter. What we found with that is Kickstarter just has this base who became our evangelists. We created this really one-on-one relationship with our customers and do have a say in the design of our products. They feel invested in our brand. We continue to do that. In fact, we've done 10 Kickstarters to this point. We've raised over $37 million on the platform, fully crowdfunded, which means we've never taken investors, and we get to make decisions like being a part of 1% for the Planet. We founded a climate neutral nonprofit to help companies to offset their carbon. We basically chart our own path and that allows us also to make the best things. We don't cut corners on any of our products.Stephanie:Yeah, that's amazing. We haven't had too many companies on the show that went the Kickstarter route. I think I can only think of one or two. What were some of the lessons maybe when you launched the first time to the second to the 20th time, that maybe things that you started adjusting over time?Elish:Some of the biggest things we adjusted were... they came with just the changes in the world of marketing, with the rise of social media in the last few campaigns, the influencer became so much more part of our campaign, especially the last two YouTube. There was Facebook, then there was Instagram and then YouTube has been around for a long time. But then we layered on YouTube specific influencers and that's it's whole other own community, especially in the photography world. And then relearning that YouTube in and of itself is a great search engine place where you can put evergreen content. There's one piece of influencer content that I have up on YouTube that I placed two years ago that still brings in five grand a month.Stephanie:Wow. Okay. What's this content?Elish:Well, we sponsored a video for basically someone who... and we were pretty adamant to make sure that if you're going to review our product, then you want to leave a positive review. We're not just forcing you to do that. We give them the product. They love it. They're like, "I love this. I want to talk about it." Usually for the bigger influencers, they're like, "Oh, I love this product. I want to put it up." It usually costs 30 grand. We did that and it got up on YouTube. I don't want to say the name just to blow up his spot or not. But put up there, did a great review of it, talked about the pluses and minuses, linked to the campaign below in the comment. That video, which because it did so well, they keep on their page and still draws traffic when you're... especially the campaign was for our Peak Design tripod, our travel tripod.Elish:When you type into YouTube "tripod" especially who people who are searching for like "how to use a tripod, this and that," it's one of the top things that comes up. People will go watch that video and like, "Oh, this is a cool tripod." They'll click the link and it still brings in a lot of traffic and a lot of revenue.Stephanie:That's really cool. Are you still using Kickstarter today?Elish:We just did our last Kickstarter in December. We did it for our new mobile line of products. We went from photography thinking that this iPhone is literally the best camera that everyone carries around on a daily basis. So we wanted to create a line of products for that. We did that in December and that was our last one. Are we going to continue to do Kickstarters? Probably, but we've done 10 of them and it's got to end someday, maybe. I don't know. We'll see.Stephanie:Why? That's what I'm wondering. I'm like, "Man, it sounds like it's going so well." I haven't heard of enough brands probably utilizing that, but it does feel like maybe that market is pretty saturated and it just seems like there's a lot on there when you go in and start looking through products that are launching and what you can find. It just feels like a lot more than maybe when you guys started out.Elish:Well, it's also, we were a part of this cohort that proved the model and then now it's easier than ever to go and make and design a product in China, Vietnam, wherever you're producing. In fact, there's full factory cities where you show up with an idea and they'll help you make it. That also feeds into the system. It's a problem with knockoffs in our brand as well. People are copying our stuff. You can just go there and that's the other part that saturated Kickstarter and Indiegogo, are these half thought out brandless products. It's easy to get lost in the fray there as well.Stephanie:Yeah. Let's talk a little bit about knockoff that you just mentioned, because right before the interview, I was watching a very fun video that you guys put together because of Amazon knocking off your bag, and I was hoping you can touch on the inspiration behind that and how you think to approach companies who are knocking off your products.Elish:Yeah. It's a funny story, obviously. The backstory is that we make this bag called the Everyday Sling. Literally that's the name. We have a TM on the term everyday sling, and we do sell on Amazon. Before the pandemic, we had a large amount of our direct revenue on Amazon. And the rumors are true that Amazon will see a successful product on their platform and say, "Oh, we can make some money on that and create an Amazon basic version of it." What they did in this case was copy our bags, stitch for stitch, it looks exactly the same, even down to the point a design element is just this little hyper lawn patch where we put our logo. They kept that patch the exact same shape and the exact same location on the bag and wrote Amazon instead of Peak Design on it.Elish:We've seen knockoffs before, but we were like, "This is egregious, this is crazy." I guess internally I'm lucky enough, we've never been a brand that does the patent trolling thing or anything like that. We build our own moat as far as around our design process. It actually is extremely expensive to make our products because of how functional and quality they are. And that's part of our own moat as well, built into the brand. But because this looks so much like it, we were like, "This is insane." It's actually far cheaper, low quality product. Our bag one for $100, they put it on there for $20. And they called it the Amazon Basic's Everyday Sling. They didn't even change the name, which was insane. They called it [crosstalk].Stephanie:[crosstalk] already good name, might as well just [inaudible] that too.Elish:Exactly. I work with our marketing team, we're all jokes here. Adam Saraceno, our head of marketing has gotten really adept at writing our scripts or videos. He wrote the script for this video and just came up with the idea and we've got an in house video team and we were recording it and we had this plan, we're going to make that video, put it on YouTube, we'll send it on email. We put it up, we sent it out and it caught fire on some forums. It started making its rounds. Before we knew it, we had something like a half a million views. And then that took off even more. I think the video has over 4 million views at this point. But the idea was like, "Are we going to sue Amazon? We're a fly to them. What can we do? We can trust that our customers can laugh at this along with us, and we can poke a little fun at them. That's all we can do."Elish:That's what we did and point out. If you watched the video, we sort of point out that you have a choice when you buy stuff. You can buy our stuff where we're blue sign verified. We're now fair trade. We pay our factories workers far above the local wages in their local... we produce in Vietnam. We're very honest about that. We offset all of our carbon and we lifetime warranty everything. It's going to last you forever, if it doesn't, we'll replace it. Amazon, you get what you pay for. But that's our message. It's easy to get frustrated, but I think it's probably better for your brand just looking at the long-term. Just stick to your guns, trust your brand, trust your product.Stephanie:Yeah. I think that's what I loved about the video, because it was so masterfully done and it's always a good reminder of why, like you said, frustration, anger probably won't connect with many people because sometimes... I mean, I think anyways, people want to see funny stuff, happy stuff. And the video was perfect where it's like, "Oh, if you don't care about all the bells and whistles, all the stuff you just named [crosstalk]." It was just so well done, especially when they were drawing it out, drawing out the product and being like, "Oh, do we want something that's actually good quality, now take that out and take that out." It was just really well done, and I'm not surprised it took off. What else helps get it in front of people to really help spread it?Elish:I mean, it was mostly word of mouth. We definitely put a few advertising dollars behind it. When it took off, we amplified it, just cause it was resonating with so many people, and I think that's important. Especially in digital marketing, you're testing content all the time, you're like, "Is this working? Is that working?" This was obviously working. I didn't need to test it against anything else. Yeah, we put some ad dollars behind it on Facebook to get it out there as well. But after we had about a half a million views on it.Stephanie:I also saw you tagging Jeff Bezos and Amazon support team and all these other people. I'm like, "Oh, that's good." But also, once again, the way you were doing it was just funny. I can't remember the Twitter copy of what you guys were saying, but it was very funny.Elish:That was Joe Callander on our team and he was like... I remember him messaging Adam and I going like, "Hey, I'm writing these tweets back to these people. I'm putting this. It's a little edgy. Is that okay?" We're just like, "Dude, gloves off, man. Go for it." He really went for it and I think it turned out really well. I like a lot of the YouTube comments because there are definitely some people in there... YouTube has got the worst trolls, I think. YouTube, there's definitely a few people like, "Why am I going to spend 100. I'll just get this $20 one." And he would just write something like, "We'd love that for you."Stephanie:Oh, that's great.Elish:"Go for it."Stephanie:It kind of reminds me of morning Brew. I don't know if you've ever seen them respond to people. Or Wendy's Twitter channel where they reply to people and have it out with them. I'm like, "I love it because they stay so close to their brand and their voice and keep it funny." Hats off to your team for knowing how to keep it on brand and keep it engaging for people. When Amazon came out with the knockoff product, and I think you said you've had other companies as well knock off your product, what kind of result did you see on sale? Did you see a direct impact when they came out of like, "Oh shoot, our daily revenue just went down in half and now we need to figure out how to claw our way back in front of our customers."Elish:Luckily, the Amazon thing made buy our bag more. I'm sure it lifted their sales as well because we just got so much hoopla, and it got a lot of press attention. Pete, our CEO was doing the rounds on a bunch of the media channels. On the other ones, we really didn't notice. If anything, it riled up our customer base because they would see it and be like, "This is just like my Peak Design bag and this is just like this." Their claws would come out and they'd go after it. That's definitely... I attribute that to our Kickstarter base and how we formed as a company of like we created this place where people thought they were part of the brand, and so they'll step out the defend it as well.Stephanie:Oftentimes I don't see brands maybe highlighting all their differences. That's why I loved your video when you're like, "Here's the five or six things that we do that you'll never find with an Amazon Basic." Did you guys maybe change your strategy or how you were messaging that? Because maybe before you weren't as upfront about like, "Here's why you should buy with us."Elish:I'm glad you brought that up. We definitely started steering away from it because early on in our brand, we certainly did that. When we started making camera straps, we were like, "This is how the other people work. This is how ours works." Then we were just like, "Maybe the product can just stand on its own." And it did because the functionality of our product was so different for so long. But again, that was a unique scenario where our product was absolutely different than the competitors. Now the competitor is copying our product. So now we're forced to be like, "They copied it, but not very well." It's almost like we need to inform our consumer of the pitfalls of trying to buy something that's similar to ours, but probably fails on quality and functionality. They're getting duped by getting these cheaper made knockoffs.Stephanie:Yep. Yeah. Yeah. That's definitely important to come back to the roots of... you have to defend your ground and you might lose sight of that for a bit, but it's interesting to hear how it comes full circle with like, "Okay, lean back into our differences."Stephanie:The one thing I wanted to circle back to was going through what it looked like when you joined the company, when it was sub 1 million and then where it's at now, close to 100, and talking about... I know we were just talking about earlier, how you're going to go into the redwood forest, you're going to be creating your own content and thinking through your marketing tech stack, and I want to hear what that evolution has looked like, because I think you mentioned the team didn't scale up with that revenue as much as maybe other companies would have done. I just want to hear it behind the scenes of what that looked like.Elish:Yeah. Credit to Pete, our CEO, and he's been extremely protective of our company culture. We're a pretty tight knit group of people, we're close, I think 38, maybe close to 40 people. When I joined, we were 10 people and it was just me and one other marketing person. As I mentioned, a lot of that was to keep culture tight, but also, we try to prioritize what we need to do and not do too much more than that. One of our mission value statements is to prioritize happiness over growth. When you start adding too many people, sometimes you end up literally looking for work for them to do, and then you're managing all those people. Then the business becomes about managing people, which is a part of a brand, but more or less so than the product.Elish:We are definitely a product focused company and it's about letting the marketing stand on the quality of the product. What we've done to enable that is rely on creating a really good network of third parties. Our shipping is third party, our warehouses are third party. We have some in-house customer service, but we have a little bit of outsourced customer service as well. For marketing, we really rely both on my strategy and executional knowledge, but we amplify that with an external digital agency. What that allows us to do is remain really nimble. During the pandemic, we didn't have to lay off anybody. We didn't make any pay cuts. We've been profitable since day one because we haven't had to push scaling because of not having investors as well that say, "We need you to make this much profit in the next five years."Elish:That's been really stressful for sure, in some instances of hyper growth because we have been growing really quickly, but again, what it came down to, it was like, "What's important in this moment? Okay, we're launching this new product, let's put all eyes there, let's make the right content, get it in the right place." I think we're going through another little phase of growing pains where we now have a very large assortment of skews and we're feeling the pinch of trying to maintain the attention on them across the board and then also making sure that we're supporting our retail and wholesale accounts. Half our business is from places like BNH and REI and we're distributed around the world. They need tons of content as well. They need our help on making sure the brand is represented correctly.Elish:It's becoming a lot of work. We've been scaling on our design and creative side, but there's starting to be a pinch on the more technical stuff. We're trying to think through, does that mean a bigger agency? Do I need to start hiring more internal people? I think it's going to be a combination of the both. I think it's going to be a skeleton crew internally that is really good at handling or wearing a lot of different hats, but then managing some external help as well to make sure that it amplifies our abilities.Stephanie:Yeah. What's the best way to structure it when you're working with agencies to make sure that you can scale yourself? Like you said, you're one of the people who are... "here's the vision and go." How do you make sure that it scales in a way that is not totally going off course?Elish:Oh man. That's a really good question. And I can't honestly say I've figured it out. I'm really not sure. I got to be honest about that. I'm going through it right now, and I think... to be quite honest, I think I haven't been able to... there's only so many hours in a day [inaudible] that require attention and it's really hard to separate or to combine strategy, deep thinking and execution. You have to turn one off to do the other. I think that's been a hard lesson that I've learned over the last year and a half, which is I do need time to just sit and write and think while I'm not executing. I'm really thinking about making sure I separate those roles for sure.Stephanie:It's definitely a hard question and a good thing to figure out, but you have time, there's no rush.Elish:Yeah.Stephanie:What does new customer acquisition look like? How are you guys approaching finding new customers and maybe keeping your current ones?Elish:There's the classics, which we definitely continue to double down on, which is... it's funny PR is an age old thing, but it's still so important and making sure that you stay just in the conversation. For me, when I'm thinking about going for... we've been so getting into the gear reviews and top 10 lists, and I'll never trust the best 10 lists ever again after being in there initially, because it's not like-Stephanie:It's how much did you pay to get that spot.Elish:Oh, yeah. Or who do you know exactly. It's not like someone went looking for the best stuff and like, 'This is what I found." No, all that stuff was definitely put in there. But to me, it's about the conversations you're starting around your brand and industry as well. When it comes to our mobile product or trying to stir up the conversation of like, "What else do you do with your phone? How do you use it in your daily life? Is having just the skin on it that doesn't do anything useful?" Because we are using it elsewhere, in our car, on our desktop, we've made a function on our bike and how it works. Do you have to jus pound people with your product or can you talk to them about it and start the conversation?Elish:There's the whole... We started digital marketing in paper, Facebook, social media advertising, Instagram. TikTok obviously, Reddit, but man, that whole industry, I think, is going through an upheaval currently, obviously with the change in privacy data that Facebook and Google and everybody is facing, and is making everybody rethink about how they're stacking that in their marketing funnel. I think it's a good thing. I think people are starting to think about the intentions and nature of their message in their advertising again, as opposed to, "Oh, if we change this button to red instead of blue, that's going to..." what intention... is that excepted to drive conversion?Elish:I think people have been overthinking the data part for a really long time instead of trusting your marketing instincts/knowing that, or just not really paying attention to the marginal benefit of spending a week trying to figure out what color button needs to be... what else could you have done with that?Stephanie:What are you guys doing? Because, I mean, I think it's such a scary world for a lot of brands who have relied on that pixel tracking, and everything they've been used to, it feels you have to move quick, make decisions in an unknown world where you're like, "I don't really know how they should operate." How are you guys thinking about it moving forward?Elish:Well, you can still track the classics, which are engagement. Then layering in other strategies of making sure you're getting first party data: your email capture and the campaigns you're doing with that. Before we could track everything, we were still trusting things like how many people were seeing it impressions and the quality of someone's audience and so on, on an influencer campaign. But also again, being a part of the conversation in places like Reddit, TikTok and making sure that that is a constant stream of content as opposed to these big advertising things where people are just blind to them now. I don't remember the last ad... I definitely learn about people or a brand, and I'm like, "Oh, that's interesting," but it's pretty rare that I click, and we've seen that on Facebook's ROI and every number across the board has tanked over the last few years. You used to put an ad, it could have anything in it and you'd get a 10 X ROI. Now we struggle to get three.Stephanie:What channels and platforms are you trying out now? Because to me, TikTok sounds like the perfect area. I get so many photography tips on there. I don't know if you've seen all those videos.Elish:Absolutely.Stephanie:That seems like a perfect channel. If you can keep that content going though. But what are you guys betting on?Elish:Yeah. We're exploring TikTok. I don't know if we're betting big there, because our demographic is a little bit older. I do have a theory that there's a very active demographic in... we're in the 25 to 40 range. I think people 25 to 40 are still actually really active on TikTok. They're just not-Stephanie:I am. I'm flapped out in the middle. I'm on it.Elish:But they're consumers, they're not posters, they're not commenters, which is fine. I think that is going to be somewhere we'll probably spend a lot of energy. We're definitely doubling down on content pieces on YouTube and places again, where we can talk directly to the population. Email's still a really big thing in customizing that consumer journey on how we reach them on that. So when they reach our website, where are they seeing? Where are they looking? Where are we sending them? Those are big. Then I'm obviously looking at Reddit. Reddit has had a pretty big limelight over the last few months, just with the game stuff. But otherwise I'm open to suggestions. So send them my way.Stephanie:I mean, I haven't heard too many people talk about Reddit. Are you just thinking about going after Reddit influencers in a way who are talking about what kind of bags to use, or how are you thinking about that?Elish:Yeah, I think we're going to look at it from the social media manager perspective. Someone who's going to go in there and just start conversing. We do have... especially with the gear focused product line, people are like, "Oh, what do you use for your Canon camera? What do you use for your Nikon camera?" Then just inserting ourselves on an organic level there. I don't know about Reddit influencers yet, but certainly something to consider. But I want to keep that as organic as possible to start out withStephanie:Yeah. It always seems hard to scale those efforts when you want to go about it in an organic way, but then thinking, "Okay, one person can only comment and keep up with so many threads and then if they also have to do Facebook and Instagram and everywhere else, it seems hard unless you continually to hire more people."Elish:Yeah. The scaling part is hard. I'll be interested to see if there's ever a good agency that can figure out how to represent your brand Well.Stephanie:Let me know, because we have not found it and we've tried many. I keep trying and trying, I'm like, "One day we're going to find something perfect."Elish:Same.Stephanie:I also think there's something to the frictionless way of shopping on a lot of these platforms. I even think about TikTok. I'm the quiet consumer who's looking through all the stuff, enjoying it, but then I will go and open up a Chrome browser to find that product. I'm the worst kind of consumer. You have no attribution on me. You don't even know where I came from. But I think there's something there where because that platform still feels like there's a little bit of friction from that video. Sometimes it flips so quickly, you don't have time to click. Is there even something to click? It seems like there's a lot of room for growth around making it easy for the customer to buy.Elish:There's been a movement to do the specific app to app based experience. Allbirds did a really good job of it. I just downloaded the Nike app, just being like, "Oh, I need a new pair of shoes," and I saw on their website. I was on my phone and then they were like, "Get the Nike app." I downloaded it and I was... this at the airport, and I bought a pair of sneakers right there because I was like, "Those are cool because they..." I mean, this definitely works with someone with a much larger skew count, but they served me a product that they thought I would like. I don't know how they figured that out. But they figured it out somehow. Maybe they just have really good products. I was like, "That's cool." They had everything built in Apple Pay, all that stuff, made it super easy. It was kind of scary, it was one of those situations where I hit buy, and before I knew it, it was paid for and was shipping to... I was like, "Wait, did I mean to do that?" And I-Stephanie:"My finger just went there and it just happened, and now I have shoes coming."Elish:Exactly. I thought that was a really cool and something... We've done a lot of work on our mobile experience, but we have a lot of work to do. I think people have... most websites they go to have a big thing to figure out for the mobile experience.Stephanie:That's something I've thought about for a while now, because previously at SaaS I worked before, many people talked about going to an app free world, and apps were a thing of the past. I even noticed that in my own history, it's like, you get a phone early on, you get a billion apps, you run out of storage, you chill out a bit and you're like, "I don't need all these apps anymore. I don't want to try everything." Then storage gets easier. So then you're like, "Well, maybe I'll try a few more." But now I'm back in the stage where I'm like, "I'm good with just a couple of things. I don't want everything there." How do you see it? I mean, I think you mentioned Allbirds did this too. What do you see that future looking like and how should brands maybe try it out there?Elish:I think, to your point, we're trying to figure it out again. I liked that app experience for a couple of reasons, which was, when you become a fanatic or just really into a brand, you're okay having that because what Nike and Allbirds are also doing well is serving up really good content on those apps. I'm inclined to go into the Nike app because they've got something cool to send me, put me in, even if I'm not buying something, I'll go look and read about it. That's a big play. Earlier as the experiences on the other platforms. Shopping in feed on Instagram and stuff, which is becoming a much better utilized thing. I think we probably need to utilize a bit better as well.Elish:There's features in there, especially in influencer campaigns when you're able to link your account to other people's Instagram accounts so that they can tag your product feed. That's interesting to me and disseminating it in that way.Stephanie:Yeah, that's definitely an interesting world to think about. I also think if you bring in your tribe and a community and create an experience that you can't get elsewhere, then maybe I would open up the app. If it wasn't just product focused, like you said, if there's content there, if there's something that's going to draw me in and keep me engaged. But it does feel hard sometimes to keep me engaged on an app, unless I get that dopamine hit, open it up and get something new. That's a high bar to have, having something new every time.Elish:Definitely a high bar to have. Then I think Casper, I don't think they have an app, but I've been in the market for a mattress. Man, I sound like a real materialistic consumer these days, but-Stephanie:Probably get so many ads coming your way. They're going to hear you. They got the voice recognition and they're going to be [inaudible] you.Elish:I'm in the middle of trying to buy a mattress and they executed on the text game really well. We do text marketing and it works really well in getting people past the last decision point. They're like, "I don't know if I want this size or that size." I don't know if you've talked to a lot of people, but text is great. People are like, "I don't think people want to receive text messages." Surprise, surprise. They actually do. They don't care.Stephanie:If [inaudible] something they want. That's what I've heard, is texts can be great if you're not just pushing products all day. If it turns into a conversation and maybe giving them some kind of value, instead of just like, "10% off, 10% off, it's a sale happening." It needs to feel personal and give value.Elish:It does. But it's a balance. If you give them enough value and then when you need it, you can send that 10% off text. It still works and that's worked really swimmingly for us. But I think the stakes are the same, if not lower, maybe they're about the same of sending an email. Just like with anything, don't overdo any piece of marketing, you annoy people. But I don't think it's any less or more annoying than any other piece of marketing I get from people as long as it's not overdone. In Casper, if you go to their website, they just really did the text acquisition, the opt-in process really well. The 10% off if you sign up for the email and they figured out a good way to do it for text as well, "Oh, you want to get this coupon straight away?" Let us text you." I thought that was cool, a way of just activating someone very quickly.Stephanie:Yeah. Are there any other brands that you watch where you pulled some tricks from, and you're like, "I love watching Nike. I love watching Casper, and then actually trying that out within our own company?"Elish:Good question. I think I've listed the ones that I've noticed recently, and definitely Allbirds did a good job. I had a good post-purchase experience recently. I'll just give you the outline of what that was, where I needed to return something. Well, first of all, obviously, there's the way of tracking and making sure that you get in contact with what you bought and where it's coming and when it's coming. There's lots of good apps for that. We use one called Shipup. And then I needed to return something and, I'm forgetting the name of the service, but now they've set up places, you can just return something. Instead of shipping it back, you just drop off at the local location. It's usually a business. It's a win-win. You bring someone into your business, you can return it there. It was seamless. I remember in the store, the person... I think I was just in some random boutique dress store and I was returning a blender for Amazon.Stephanie:Oh, that's cool.Elish:I'm making those things up, but it was that sort of distinct, that sort of contrast of what I was doing. I remember then scanning the product and then I got a notification of my refund directly on my phone in that second. I was like, "That's awesome. Now I know when I buy from this person and I need to return, it's going to be seamless. I'm not going to worry about where my money is, where the product's going." It made me want to buy from them again. It was great.Stephanie:That's a good experience. I think that's such an important reminder too, about lifetime value of a customer. It's not always about those quick hits. Like you said, if I were to have an experience like that, I would buy many more things much more quickly, if I'm like, "Oh yeah, I can just go right next door and this boutique will take any of my returns for all my blenders that I buy."Elish:Yeah, exactly.Stephanie:That's awesome. What experimental things do you plan on doing over this next year or two that you're most excited about, but you don't know if it's going to work, or maybe that your team's even telling you like, "No, Elish, this is a bad idea."Elish:Really good question. I'd have to go into my notes. I ideate on this stuff for a while. But we tried some podcast stuff last year when money was a little bit more free flowing for us. We are a travel bag brand, so that's definitely taken a hit for us. And that was exciting at the time. We had a piece on Conan O'Brien show and I was like, "Oh, Brian said Peak Design. That was pretty cool." As far as I can tell, CPMs for podcasts are still relatively low compared to other things. I think that's great. I think there are some expansion in still are our email practices on how we're collecting emails and moving outside of that. What you mentioned just now, what we talked about, the being able to shop our product in social posts that aren't even our own, there are some technologies, video technologies out there where you're shopping in video when it's placed on someone else's website. I think that's really cool.Elish:Then partnering with our distributors more on how they're representing our brand and getting that more up-to-date message out quicker with them. Reddit, we mentioned. Forums.Stephanie:Well, I think it'll be interesting with all the pent up demand of people wanting to travel and get there.Elish:I hope so.Stephanie:It'll be fun to probably see a very different peak than maybe what you've seen over the past year or so, and you all just have to be ready for it, I guess.Elish:Yeah, exactly.Stephanie:Cool. All right. Well, let's jump over to the lightning round. The lightning round is brought to you by Salesforce Commerce Cloud. This is where I ask a question and you have a minute or less to answer.Elish:Okay.Stephanie:Are you read?Elish:I'm ready.Stephanie:You're adjusting your seat like, "Ooh, I got to get ready for this."Elish:Yeah. Ready.Stephanie:All right. First up, a few people know that I like to...Elish:Few people know that I like to play poker.Stephanie:Are you good at it?Elish:I was a professional for a year. Right after grad school, I was looking for a job and I played live poker for a year.Stephanie:Awesome. What one thing do you not understand that you wish you did?Elish:Oh, man. So many things. Probably... sorry, I have a minute or less. Is that right?Stephanie:Yeah.Elish:Give me a bell if I... Just topic of the times right now is definitely the Bitcoin market and different types and where, give me a glass ball of where that's going because I want in. Every time I think I've figured it out, I learn something new and I don't. Yeah, I'd love to understand the future of the economics of how that's going to work.Stephanie:If you were in the Austin area, I would tell you to come to our little crypto dinner that we do, where we go deep into futures and investing in that. It's a very interesting space. It's around here.Elish:Okay. I'll come visit it sometime, for sure.Stephanie:Yeah, that sounds good. A time when I made a powerful choice was when what?Elish:Oh man. I've quit a lot of jobs and taking that chance on myself. I did that when my last corporate job, if you will, I worked for American Express and I said, "I'm just going to go figure it out," and I've never looked back. I know that's a common story, especially in our worlds, but that was the most freeing choice I've ever made, is just I will never work for a large corporation where I can't be in control of my destiny.Stephanie:I love that and I agree. I think it's still always a good reminder though, because it's easy to get pulled in. A good reminder to be able to have that freedom to do what you want. If you were to have a podcast, what would it be about and who would your first guest be?Elish:I think it would be something about just the hilarity of the world, how it intersects... just how we all take ourselves so seriously, but then trying to basically pull back the layers of the onion on that, and then looking at how it's affected us as people when it comes to our depression, our nutrition, and how we live our lives. It's basically all of the loose things that you could think about for the millennial generation and make fun of it, but in a serious enough way to be like, "It's going to be okay, man." I think we all get so caught up in like, "How am I changing the world? What are we doing?" I think the message I'd like to tell most people is like, "This is..." the message of the movie Soul. Did you see Soul?Stephanie:Yeah. So good.Elish:It's like, "Oh man, I'm trying to do something big." "Actually you're doing the big thing. This is it."Stephanie:I like that. Who would your guests be then?Elish:I would get a combination of some... I think, going back to Conan O'Brien, I love Conan. He is one of the funniest people out there. I think he went through this crazy arc where he was supposed to take Jay Leno's spot and then they took it away from him. He got pretty angry about it and now he's still doing his own thing, and I'd love to talk to him about... people have talked to him about that, but where he thought he saw yourself going and now where he is now and if he's okay with it, and just what perspective that it gives him.Stephanie:Yeah. Well, I love that. That's a good one. All right. And the last one, what one thing will have the biggest impact on ecommerce in the next year?Elish:The climate and how we think about people and consumption. Fast fashion is going out of fashion. Absolutely. I hope anyway. But I actually don't know that because I don't know if I'm just in a bubble or I'm just in a bubble of people that care.Stephanie:No, I think I agree with that. There's such a big shift now to sustainability and how companies are creating things and paying their employees and all that. Yeah, I agree. That was a good forcing function this past year, too, to think differently about all that. Elish, it's been such a fun interview. Thanks for coming on the show. Where can people find out more about you and Peak Design.Elish:Peakdesign.com. I just had a contact button up, but you can go to elishpatel.com and email me if you have any questions.Stephanie:Amazing. Well, thanks so much for joining us. It's been a blast.Elish:Thank you.
Most people would think that a company in the Fortune 500 wouldn’t have much work to do to stay on top and compete against scrappy start-ups. But in the world of ecommerce, companies large, small, and in between are all on somewhat level playing fields, and oftentimes, the bigger, legacy companies are running behind the younger brands. For Stanley Black & Decker, this was the case when it came to the company’s ecommerce business, which is why SBD announced a goal to double its online sales in order to re-establish itself as a leader in all areas. Katherine Bahamonde Monasebian is the President and GM North America Commerce for Stanley Black & Decker, and she has been leading that charge since joining the company in early 2020. Katherine entered the world of retail, having cut her teeth at places such as Lululemon, Barney’s, and Juicy Couture, but she’s always loved a challenge, and going from the hardest-hit industry in the pandemic (apparel) to the top-performing vertical (DIY and home improvement goods), was one of the biggest career shifts she had ever made. On this episode of Up Next in Commerce, Katherine explains why she made the decision to role up her sleeves and join Stanley Black & Decker, and how she has grabbed the company’s lofty ecommerce goals by the horns and got to work. Katherine discusses what it takes for a large company to experiment with new platforms, and how she measures ROI and attribution to assess risk, and she looks into the crystal ball to predict how ecommerce will continue to change, especially in terms of B2B innovations. Plus, we have a really meaningful conversation about how women are being brought into the fold at Stanley Black & Decker and elsewhere, and she explains why it’s so important for a company to practice what it preaches when it comes to its values. Enjoy this episode!Main Takeaways:Higher Stakes: Larger companies have a lot to lose if they make a misstep, and as such, they have to be a bit more cautious with the risks they take. But they still have to break out of their shells and explore all of the options, trends, and channels that are dominating the ecommerce space. To toe that line, looking at the data and the ROI of any experiment is the best way forward.Knocking on the Door: Since early 2020, the ecommerce industry has seen massive growth and acceleration, but the jury is still out on how much of the shift online will stick. Most experts believe that at the very least, digital platforms will be the “front door” for customers to discover and learn about brands and products.Trickle Down: Everything has to start at the top — from company values to operations to business goals and expectations, the leaders of the organization have to set the tone. If they do, and they practice what they preach when it comes to things like gender parity, diversity and inclusion, KPIs, work expectations, etc., talented people will be more inclined to join your organization, and they are more likely to stay for a long time as well.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey there, and welcome back to Up Next In Commerce. This is your host, Stephanie Postles, CEO at Mission.org. Today on the show, we have Katherine Bahamonde Monasebian, the President and GM of North America Commerce at Stanley Black & Decker. Katherine, welcome to the show.Katherine:Thanks. Thanks for having me.Stephanie:I'm so excited to have you on. I was looking through your background, like I always do, and you've worked at some really great places. You've worked at Barneys, Juicy Couture, lululemon, ALEX AND ANI. I was going through the list and I was like, "Well, she is a VIP in this industry." I want to hear how you kind of got into those companies and what your journey in ecommerce looked like before getting to Stanley Black & Decker.Katherine:Yeah, sure. I'm always interested when I hear interview candidates and I always knew I wanted to have this career. For me, it was I really didn't sort of earlier on have much exposure really to the broader world or my place in it or even grasp what was possible really career-wise. After college, I actually started off in investment banking. It seemed like a good thing to do, and then that experience actually ended up giving me a great business foundation, but later in my career, I transitioned to ecommerce and worked in a wide range of mostly retail companies, both early stage and mature at sort of different times in their life cycle.Katherine:What I ended up loving about ecommerce is just that it really touches everything, yet really you have to think about the end-to-end experience, you have to be close to technology, you're driven by numbers. You have to execute and it's fast-paced and not the same job twice. I wouldn't give it up for the world. I found my calling, for sure.Stephanie:Yeah, I love that. How did you choose the companies that you worked for?Katherine:Yeah, so I've always been drawn to kind of change roles, so during inflection points in the company's sort of journey. Whether it was an early-stage startup or whether it was a company trying to transform, I was always drawn to brands with the customer at the center looking to grow across sort of new business models and such. It wasn't necessarily a particular affinity to a particular category. I did spend a lot of time in apparel, but it was more about the specific opportunity in terms of scope and ability to impact.Stephanie:Got it. Did you ever get to a company and you reflect back and you're like, "That was one of the most challenging times of like working and trying to either start ecommerce or do something new? Do any of these companies come to mind where you're like, "That was super challenging and hard and the best experience ever?"Katherine:Well, honestly, I would say they all were, whether it was sort of more in a build capacity or more of a turnaround. I think that the last 10 years, a lot has been written about the retail apocalypse, which was like 10 years in the making, but I was sort of living through just these really dramatic shifts in consumer behavior and values. Then, expectations just really rising and companies trying to meet these expectations, which was just really rough structurally. I think all of them were challenging in their own right.Stephanie:Yeah. That's awesome. All right, so Stanley Black & Decker, they are a Fortune 500. I think they're like number 250, 252, something around there, so big company, a lot of employees. They, of course, make industrial tools. You joined during the pandemic, right? Like in 2020, you joined. I want to hear a bit about what convinced you to join a company that also is, to me when I hear about them, like mostly male-dominated. Coming from apparel and a different kind of background, what was that driving force to join Stanley Black & Decker?Katherine:Yeah, so what drew me to the company was really just these incredible brands, so for those who don't know, like DeWalt, Craftsman, Black & Decker, Stanley, Lenox. I'm sure I'm missing some, but just this company that's just this powerhouse, number one in the industry. Been around for almost 200 years, which means you have to innovate to be around that long, global, 60 countries.Katherine:All of that, sort of the benefits of a very well-run, profitable kind of performance-driven organization, but also at the same time, and I didn't appreciate it as much outside-in at the beginning, but really looking to transform and at this scale. A lot of the skills that I picked up through retail, the hitting from consumers from every angle, sort of managing, again, the technology and the data and the marketing and sort of the consumerization that took place in retailers being able to apply that skill set to manufacturers who are now at the tip of the spear I thought was just really exciting for me.Katherine:One other thing that I think we're very proud of is just the company's focus on purpose and just diversity and sustainability and all of the things that you can put a list on the wall that are really embedded in the DNA and the culture of the company made it just really attractive. You mentioned the male-dominated and you're right, manufacturing and tools specifically are like being a pilot or being in technology. They're just not... The typical female representation isn't as high as other industries, but coming as a woman in a senior level from a different industry and I'd really not had any challenges. The tone is really set at the top and the company's consistently ranked as one of the best employers for women.Stephanie:Wow. That's awesome. Did you kind of have a handy background before you entered there? I heard all of the names that you were saying and I'm like, "I feel like I might know what that tool is," but I'm just imagining my Dad right now with a tool belt. I'm like, "I can't really figure out which one that is. Did you have a background in that? Or was it completely new coming from like the apparel scene before this?Katherine:No, it was actually completely new and to add to that, I live in the middle of Manhattan, so I don't really have a yard. The elves kind of... When something's broken, you call and the elves kind of fix it-Stephanie:Yeah [crosstalk]-Katherine:... so it was a steep learning curve, for sure, in terms of product, but having one two or three in every category that we're in, so that helps. Just being number one helps, but it was from a product perspective quite a leap from apparel.Stephanie:Yep. Yeah, I think my three-year-old knows more names of tools that I do and he'll correct me. Anything with trucks, he's like, "That one is not an excavator, Mom." I'm like, "Okay. All right, that's like some kind of ratchet. All right, thanks, Raisin." What did your first 90 days look like at the company? Did you go in with a plan? Were you like, "I've done this before", and then it went as planned? How did you think about when you first joined?Katherine:Well, I mean, the skill sets, as I mentioned, are highly, highly transferable, but my role was new to the organization and I definitely took the time my first few months to really define my scope and really understand our operations, dive into our business. Our goal, which we said publicly, is to more than double our online sales in just a couple of years, so it took a lot of sort of diving deep into our commercial accounts, marketplaces, just looking at our social and customer touchpoints, new business models, B2B transactions and such. It was a little bit of a sort of listen and learn at the beginning, and also just the way to go to market is very different from a retailer where you manage everything.Katherine:In my prior roles, I had technology, I had marketing, merchandise, I had the entire piece of the business, going from that to highly global and matrixed organization. Just a very different way of operating. The same sort of end experience, the customer at the core, and the same objectives, but a very different way of execution.Stephanie:Yeah, and I was looking through one of you guys' investor presentations where it's talking about the model for like, "We're focusing on B2B, B2C, and like C2C, and we're thinking about all of those as being where we want to head over this next year." How do you put on those different hats? How do you meet all of those customers where they want to buy it?Katherine:Yeah. You know, prioritization is a big one in terms of, how do we look at sort of all of the different potential value drivers? How do we prioritize against the high [inaudible] ones? We are definitely looking at basically doubling down with our retail partners and then also exploring kind of new business models, but there's a lot of like foundational work, which isn't the most glamorous or strategic. We're doing a lot of just capability building to enable the scale that we want to get to.Katherine:This is like our studio and our content, our analytics and reporting, demand planning, customer service. We just are putting in an entirely new martech stack, so there's a lot of... It's beyond just the stated intention. We're actively investing against that foundation that will then enable all of those different business models that you rattled off, B2B, B2C over the course of the next few years.Stephanie:Yep. What fell... Around all of the new things that you're implementing, it seems like all of that would be new, kind of like your role was new in this company. They didn't really have a big focus on this beforehand. Which parts do you think are going to be... I'm sure they're all very important, but which ones are you most excited about and you're like betting big on right now? You're like, "This is going to change the way the whole company operates," or, "This is going to see the biggest ROI when it comes to online sales and whatever it may be."Katherine:Well, we have, again, as I mentioned, a very broad scope that ranges from looking at things like content and dropship to some, again, social selling and distribution and, again, doubling down with our key partnerships in North America, which are exceptionally strong. The one that I'm very passionate about is content and I know that, again, it's sort of like just to play, but for us it's very important in that customers and the end consumer now looking to manufacturers just to really understand the product.Katherine:So much of the role of sort of digital influence with now post-COVID, it's estimated to be even higher the number of transactions that begin on digital channels, regardless of where the actual transactions is made. We have a very big investment in content. This includes sort of what samples we shoot off in the milestone process to how we deliver that content to all of our different distribution channels to more enhanced and experiential content. It's a very big undertaking for the last I would say five months, and we're expecting to start to see results in Q3 of this year.Stephanie:Oh, cool. We've had a lot of brands on here talk about content. We've got brands who are making their own branded content, like working on Netflix series. We've got brands that are building their entire content platforms, kind of like a Netflix, but they're using AI and ML and it's being trained and all of that. It feels like it's just kind of like Netflix. Other people just focusing on TikTok or Instagram. What do you think is going to be most impactful? You said you were going to start seeing results. What kind of content are you guys really leaning into? Who is it going after? Who is it targeting right now?Katherine:Our customer base spans professionals, the pros, to tradespeople to DIY makers, so we have diversity in terms of who that end user is, but as I mentioned, they're all looking for inspiration, education, product information, pre- and post-customer care. We are starting with the basics or sort of what our ecommerce core/ecommerce content is. We have a lot of A/B testing happening right now to really understand the true return. With our scale, it's less intuitive than you're being at a more early-stage company where you kind of have line of sight to the full business. We really have to look across all of our different distribution channels globally to really understand what the right investment is from sort of a sales lift perspective.Katherine:We are looking at enhanced content, which is more along the lines of what you were saying, sort of borrowing from some of the learnings we have in global markets, which are more advanced than we are progressive in terms of mobile and social and such. We're really looking to kind of disrupt ourselves and to take a fresh look at how we represent our brands online and how we go to market.Stephanie:Yeah. It seems like there could be such a big area for impact around partnering with all of the DIY kind of people, the Chip and Joanna Gaines, like all of the influencers. I mean, there's this one woman on TikTok that I watch where she'll redo someone's entire bedroom, and I watch her and I'm like, "What exactly were you using to get that? Just tell me exactly what it is and I'll just get that and I'll know it'll work." It seems like there is a lot of opportunities popping up now that are outside just the traditional TV ads, which still apparently work, at least from what I've heard on here. There's a lot of little micro opportunities that could probably have a lot of lift and reach people that maybe you wouldn't have otherwise.Katherine:Absolutely.Stephanie:Are you open to channels like TikTok and things like that? Or are you still kind of staying more traditional like Facebook or even like Super Bowl commercials, which apparently also have big lift?Katherine:The status quo, everything is up for debate. I think one thing that being in a large global, as you said, Fortune 250 company, the stakes are high. There's a lot to lose with sort of our appetite for risk, so it's a constant conversation that we're having. I'm sure other CPGs have the same. I'm just thinking about tolerance for risk like, if you think about it, manufacturing, I have a hundred percent of the information and I have kind of longer lead times and I am very efficient. That's like the opposite of what you're suggesting, which is, "Let's test something out. Let's see if it works, and if it doesn't, then we move to something else."Katherine:Let's work in... The return isn't necessarily there from an ROI perspective up front because we're basically understanding that maybe it's a data play. Maybe it's okay if it fails. All of these things are very, very intuitive for companies that are early stage or that have a different sort of origin and history or are new. I think when you're asking like, are we open to these channels? We're open definitely to the conversation and we are speaking internally and really getting a sense of what our appetite is for risk and how we mitigate against a risk and how we think about investments and how we think about speed as our business model shifts.Stephanie:Yeah, yeah. That's a whole different model and you've got so many eyes kind of watching it like, "How did that pay off? How did it pay off? Let me hear the ROI versus this marketing campaign?" Very different than like a new B2C company that can just move quick and break things and say, "Sorry, later," and no one will probably even-Katherine:Exactly.Stephanie:... notice. Well, the one thing that seems really tricky, too, with a company of Black & Decker's size is attribution around these campaigns. What are some good best practices when trying to measure the ROI of marketing efforts or ecommerce efforts or any of that?Katherine:Attribution is very top of mind. We have a big effort around data and insights, which then goes into AI and predictive analytics, so a very robust effort around data. We've recently, as I mentioned, invested around our martech backbone. This is a CDP, a PIM and DAM, looking at our ESP in our chat and social listening and all of those marketing automation that will help us get smarter about what the impact of our different efforts is. I think we're early in our journey and it is tricky.Katherine:Unlike retailers that you sort of have a lot of the data firsthand, there is a lot of our sales come through our retail partners, so building those relationships with the end user and really leveraging the POS data that we do get is just a little bit of a different exercise than it is in kind of more direct businesses. Attribution is something that we're very keen on understanding, and the goal is to be extremely data-driven and really, again, understand the value, even if it's not a pure revenue so we can prioritize our efforts.Stephanie:COVID obviously made a lot of people want to come home and work on things. Home improvement was spiking. Anything DIY was spiking. What kind of quick changes did you have to make? I'm assuming maybe you came in and you're like, "All right, here's kind of... I'm going to observe. I'm going to see the org. I'm going to talk to the people and then we're going to do this." Then, maybe have to be like, "And pivot again. Everything's up and to the right. Everyone wants to be home right now and fixing their house." What kind of quick changes were you able to possibly make around them? Maybe increase demand?Katherine:Yeah. I mean, you've seen the charts of like the biggest winners and losers in COVID. I think-Stephanie:Yeah.Katherine:... apparel was at the bottom and I think DIY was at the top, so definitely a huge boom and one that I don't think anyone could have really anticipated. We've disclosed publicly like ecom presented 18% of our business last year and went up five points just in that year-Stephanie:Wow, yeah [crosstalk]-Katherine:... so [crosstalk]-Stephanie:... I think I saw 8% back in 2019 was like the share, so that's awesome. Congrats.Katherine:Yeah. Yes, so to your point, it's about meeting that demand, so there's a lot of creative things when you have... With performance market, there's a lot of things you have to do to pivot, so to adjust to the commercial realities, but I think like more important than just meeting the demand, I think what COVID did for us was just like handed us permission to double down, so [crosstalk] an incredibly big base.Katherine:We now have set out to double our business within the next few years and we don't just want to take share. We want to grow the category, and because we are number one globally by a three-times factor in terms of tools and storage, we're in this phenomenal position to really seize the opportunity. We're well positioned. I think it's been shown by companies that act swiftly after a crisis like end up reaping the rewards, so we're not retrenching. We are definitely doubling down. It's one of the biggest commitments and priorities of the company.Stephanie:Yeah, and what about forecasting? I could imagine a lot of people get really excited about DIY. I even think about some of the things that I got and then I kind of was like, "Okay, this seems a little hard." Pinterest fails just running through my mind of like, "I probably shouldn't try this myself." How do you think about forecasting at a time when you have seen all of this really crazy increased demand? Everyone wants to do it now. Are you kind of like going to keep that trend going? Or do you have a point where you're kind of pulling back a bit of like, "Okay, things might normalize a bit?" Or, "We need to think of other ways to increase the lifetime value, reengage these people, bring them in in a different way? How are you thinking about the next year or two?Katherine:You know, I get asked that a lot. What is the future? How much of this is sort of permanent? What's going to stick and what's going to not? When do you kind of shift strategies to exactly along the lines that you're saying to more of inner retention, engagement, and loyalty and such? I wish I had a crystal ball because I do think I'm personally not going to be lining up for Black Friday deals ever again and I'll probably stay in yoga pants, but I personally believe that some of the changes that have been like in ecom, not just our category, but more broadly are really signaling an entirely new phase of growth. I really don't things will ever be the same even after mass vaccination.Katherine:I think we've very bullish internally, that while there may be some shifts like in terms of what we call ecommerce that's kind of hybrid selling. We've seen the curbside pickup and the focus in all of the payment. All of the innovation that's happened at the home centers, we've seen what it's prompted, but I really don't think that we're going to see... I think we're going to see some permanent shifts in terms of digital being that new front door for our category. We continue to remain very bullish.Stephanie:Yeah, yeah. I can see the retailers having to also think about especially around home improvement shifting their mindset. The other day, I was talking with someone who said that essentially contractors were doing buy online pickup on the curb similar to that and that I think it was like a Home Depot or something, all of their employees were trying to get stuff for these contractors where they were on the floor for two hours trying to gather this pretty large contractor's order. It was like, "Well, why would I ever go in or even send one of my employees in there to do that when I can just have the retailers working for me?"Stephanie:We've had some strong opinions both ways around like that's still going to say versus we had on [inaudible] which is like a big HVAC B2B-type company. She was essentially saying that she didn't see big home improvement stores needing to have as much inventory and warehouse anymore and kind of being more like guide shop placing orders online, like, "Why do you need to go in there and find the exact screws or plumbing pieces that you need? It should all just be ready when you get there." How do you view the world of retail when it comes to that?Katherine:When it comes to like B2B, which is that's what that is, like the pro and contractors and such, I think that it's like 70% of the workforce is going to be Millennial and Gen Z and these people that are making the purchasing decisions, they're not going to do it old ways. They want the experiences that they have in their personal life when they get things quick and convenient and have price transparency and can do it 24... All of the things that sort of B2C has sort of led the way.Katherine:I think the next frontier is B2B in that way, and so I think that maybe it's not that specifically, but I do think that retailers will have to continue to reinvent and meet these very difficult expectations. I think that what we've not kind of put in a box, like curbside versus... That is kind of going to get very, very, very blurry, and even the attribution of what we call ecommerce is getting very blurry, which makes determining investment return very, very difficult when you think about things like content, you know?Stephanie:Yeah.Katherine:It's not really the return on the ecom transaction, so I actually think that there will be continued kind of shifts in expectations and that a lot of this behavior will take on a form that we can't even envision now. I think the next five years are going to bring unprecedented change.Stephanie:Yeah. I always continue to think about the role of curation with these especially huge stores, like the Loweses, the Home Depots of I want to go in there and have an experience and I want to get something there that I can't get online. I can get online and order whatever tools my TikTok video told me to get, but what I can't get is if I go in there and there is like certain reviews or little maybe like scan this code and you can see a certain video that you wouldn't have seen otherwise, or just thinking of ways to keep me engaged and walk away with some kind of experience or having some kind of curation in retail that I couldn't get online.Stephanie:I think, why even go to the Pottery Barns or the West Elms? Even sometimes T.J. Maxxes because certain ones have certain kinds of curation. I think that could be big thing going forward, but feels really hard to crack that. I even think about the Amazon Bookstores when they had the little reviews from the individual employees that had picked the review off of Amazon's website. That to me was very engaging seeing which ones they picked, but then thinking about how to scale that and stay on top of it feels hard.Katherine:Yeah. You need something different, which is why I think there's going to be a lot more innovation, or there's going to be services. What is the new mall? You know?Stephanie:Yeah.Katherine:Is it a place you go with your family to feel like [inaudible] fun from the day? You see like precedents in China and other areas of what shopping really is, but I think what makes it hard, back to your comment about attribution, is now the consideration and the purchase are not linked, so it makes it even harder because you've got all of your inspiration and everything online, and then you're going in store not to sort of consider and browse and be hustled. You're going in with more intentionality potentially, so it's created these very strange journeys that are just, again, really hard to organize around structurally.Stephanie:Yeah. Oh, that's an interesting way to put it that your inspiration of when you find something is maybe not linked to when you're in the [crosstalk] store. I think about that all of the time, even with recipes and things. It's like I go in there and I'm like, "Oh yeah, I'm going to make this one Thai thing," and I get in there and I'm like, "What am I here for again? Where do I find my tab where my recipe was?"Stephanie:It's how do you keep that person engaged all of the way through to really push them past the finish line and not be like me where I'm like, "Oh, tomatoes. I need tomatoes. That's not part of my recipe, but I just am all the way over in a different aisle and I didn't come here for that. Yesterday, I walked out and I didn't have any of the stuff. I'm like, "This needs to be better, but I don't know how to improve on this."Katherine:Absolutely.Stephanie:It could be anything, though. The one thing I want to kind of circle back to, too, that I didn't touch on enough, but I was just thinking about the female engagement of the workforce, something that is so important, especially around certain fields that maybe are male-dominated. How do you think about bringing in great talent? How do you recruit great people? How do you encourage people to step up? Oftentimes, females... I think I've read a stat when I was back at Google where they said that females won't apply to a job unless they're like 90% qualified [crosstalk] where men will apply when they're like 60% qualified or something, so [crosstalk]-Katherine:Yeah, I know. I've driven past retail. I know retail-Stephanie:Yeah-Katherine:... the [crosstalk].Stephanie:... yeah, yeah, exactly. Like, "I think I've heard of that store before. Apply." How do you think about encouraging badass females to apply and work for you all and be the top place to work? I think you said that you guys are one of the top places to work for women. How do you even go about creating that culture?Katherine:Yeah. You know, this is one that really hits me hard just on the personal level just because I think everyone knows at this point the impact of the pandemic on women and that they could take a long time to get out of this and over like 2 million women just left their jobs.Stephanie:Yeah.Katherine:I think that it's very important half of the talent pool are women. We need those voices in that seat at the table and I really do think women might change the dynamic of Corporate America and was essentially designed pre-technology. When you think about when corporate even offices and sort of structures, patterns of interaction were designed. It was just a completely different point in time, so I think kind of blowing that up and kind of thinking with a fresh sheet of paper is one thing. We're taking a hard look at sort of the future of work and the office and that helps with attracting women who sometimes can't reload their family in order to take a GM role of a country or such.Katherine:I think that for attracting incredible talent, we have had a big effort and I think that the remote work has helped. We've now had access to just incredible talent. I think my team is in 15 states and one Canadian province, so time zones is a little difficult and there are some challenges with building culture and bringing in more junior people and getting them acclimated. There are some challenges, but I think that's a big piece of it. I think the tone just has to be set at the top. I don't know that you can like dictate a culture and you kind of have to live it. The fact that our leadership team has made it very, very clear unapologetically that we stand for nothing other than gender parity, than social justice. We had empathy principles.Katherine:I told my husband I thought it as the most... I told him, "You've got to be kidding. This is incredible work-life principles that the most senior leaders had made like very public pledges to really respect the folks who are bearing the brunt of the pandemic in many senses and so we don't lose that talent." I figure there are a lot of different sort of angles that we're pursuing as a company from flexibility to return to work after two years off to a lot of more formal programs, but I'm not sure that you can... I think a lot of it is just sort of cultural and the tone being set and the overcommunication about how the values that, I guess, we espouse as a company.Stephanie:Yeah, I love that. I think also, like you said earlier, empathy is such a big thing because you can have messages from the top about what's okay and flexibility and all of that, but a lot of times, it actually depends on your coworkers. If I were to say, "Hey," just like right now, "All three kids of mine are sick right now, all three of my kids are sick. I can't come in. What do you feel from them? How do you encourage empathy among all of your employees who want to lift you up and support you instead of being like, "Oh, Steph's kids are sick again, this is like the third time in a month?" Which it may be, you never know, and figuring out how to develop that among your entire team seems like a much more-Katherine:Yeah, and I think-Stephanie:... grassroots effort.Katherine:... what helps is the male ally, so we have something that we really want is to lead loudly. I historically, I have no problems balancing my personal life. "I just have a commitment. I can't make it. I have a conflict, but now I don't." I make an effort to say, "I have to take my daughter to the doctor," and that's okay. It's also like setting the example that your life is balanced with a lot of other commitments and we want you to be a whole person and that our job as leaders is to stop asking women to change, is to let us change make best tap into the diversity of thought and sort of life commitments.Katherine:I think that unless we figure this out, I fundamentally think you can't legislate to get out of the wage gap. You can't have policy... You really need to make real, meaningful changes within the place that we spend all of our time that gives us meaning to our lives. They've shown how important work is to identity and such and really create the space for true belonging.Stephanie:Yeah, yeah. I think also the best companies will be the ones who think long term around that. That's why I always look back at my time at Google and respect the teams that I worked for so much because I remember I was in at the Finance Group for Maps and I was switching over to like a PM type of role for Augmented Reality and Streetview. I was eight months pregnant when they were recruiting me and I was like, "Do you see this? I will only have a matter of, I mean, weeks, two weeks maybe to work with you guys. I'm really interested."Stephanie:They were trying to pull me over to their team, but I'm like, "But I'm only going to be here two weeks," and then we have a very good maternity policy and you get up maybe a couple of weeks off beforehand, is this okay?" They're like, "Yeah, of course it is. We want you long term. You being gone, the company will still run, things will be fine, but we're excited when you get back here and we want you to come back when you're ready and your spot will be here." I just remember being like-Katherine:Incredible.Stephanie:... "Whoa, like that's the kind of [inaudible] long-term thinking." It's not around like, "Oh, it's going to be hard for a couple of months." They give none of that. It's like, "Of course, everything will be fine, but we'll be here when you're ready to come back," which I respected [crosstalk]-Katherine:I do think those are the companies that will win.Stephanie:Yeah.Katherine:Employees will feel like they're a part of something. They'll be more engaged. I don't just think like it's fair and it's the right thing to do. It is a hundred percent of business advantage.Stephanie:Yeah, yeah. I agree. Love that. All right. Well, let's move it over to the lightning round. The lightning round's brought to you by Salesforce Commerce Cloud, our amazing sponsors. This is where I'm going to ask you a question and you have a minute or less to answer. Are you ready, Katherine?Katherine:Oh, the pressure. Yes.Stephanie:[inaudible]. All right. What's one thing you don't understand today that you wish you did?Katherine:Blockchain.Stephanie:Good one. I mean, yeah, so many opportunities there, I think anyways, but-Katherine:Yeah, and again, I understand it at like at a high level, but what are the practical applications in the short term? Same thing with 5G. I also throw that in there.Stephanie:Yeah, yeah. I don't understand 5G. I got a Blockchain [crosstalk] yeah [crosstalk]-Katherine:You're not like a [inaudible].Stephanie:No. I'll let you know. I'll be like, "Here's a TLVR," and make it short. If you had a podcast, what would it be about and who would your first guest be?Katherine:My goodness. It would be about just the topics of the day and I think my first guest would be Dolly Parton. The reason is is that here she was, she had like nothing, and then she became an icon. What propels someone to really... What kind of drive does it take to really leave her very, very humble origins and then sort of build an empire and really have this worldview that she has? I think just really picking the brains of people who have done incredible things.Stephanie:That sounds amazing. What's the nicest thing anyone's ever done for you? It can be life or work.Katherine:Life or work? I would say it would probably be something with... I would say my daughter. I have two daughters and I would say for... I think it was my birthday or Mother's Day, they made Mom Appreciation Day, so the whole day was devoted to me and I got my favorite breakfast. I got to do things that were really what she wanted to do, but that were under the guise of what I wanted to do. She's only four, but it was just very special that she kind of thought of this holiday that would be kind of in my honor.Stephanie:Oh, that's cute because they were getting ice cream. "Then, we're going to have candy, and then we're going to get pancakes [crosstalk] with the syrup [crosstalk]-Katherine:Exactly what I'm [crosstalk]-Stephanie:... "it's your day, Mom." That's so cute. What resources do you check in with each day or week to kind of stay on top of all of the ecommerce trends? What brands do you maybe watch to also kind of stay on top of it?Katherine:Yeah, so it's funny. I always ask people that because there's just so much content out there and I think the curation is the most difficult. I read The New York Times and I listen to podcasts. I like Pivot with Galloway and Kara Swisher. I live The Jason Scott Show. I mostly look to earlier stage brands and companies sort of for inspiration and innovation. I'm not sure what I think about the era of big retail and such, but I think that a lot of what the more progressive pure plays are doing can lend itself to the companies that are at a bigger scale. That's who I look to for more inspiration.Stephanie:Yep. Not bad. The last one, what one thing will have the biggest impact on ecommerce in the next year?Katherine:Okay, so what I think will have the biggest impact in the next year or so is on ecom is just the continued blurring of the lines with score and web. We've seen the proliferation of all of these delivery models. We've seen the impact of social commerce. I just think there's going to be a lot more. I think in the far future, there'll be more off-the-screen IoT. Voice will become more prevalent, all of those kind of... AI, AR, VR, all of that, but I think in the immediate term, we're just going to continue to see sort of these models blurring and the distinction between what is ecommerce and what is sort of brick and mortar continue to become more or less relevant.Stephanie:Yep. Yeah, so basically things start to kind of get bundled together a bit more. Right now, it feels like there's bunch of like tentacles everywhere and you have to keep track of everything, which is why we named the show Commerce and not Up Next In Ecommerce.Katherine:That's why my title is Commerce.Stephanie:Yeah, yep. Oh, I love it. That's-Katherine:Yeah [crosstalk] very progressive, though we're thinking that [crosstalk]-Stephanie:Very forward-thinking. We had our crystal ball. We're ahead of the game. Well, Katherine, this interview has been so fun. It's been great hearing about what you guys are up to at Stanley Black & Decker and all of the cool work that you're doing. Where can people find out more about you and the family Black & Decker and maybe even apply for you team? If I wasn't here, I would. It sounds epic.Katherine:Oh my goodness. Yeah, everyone should want to be a part of it. We're doing some amazing things together. You can reach me on LinkedIn and you can learn more about the company, stanleyblackanddecker.com, but thank you again for the opportunity. This is a really fun conversation.Stephanie:Yeah, thanks. It definitely was. I'll have to have you back for round two in the future. It'd be fun.Katherine:Absolutely. Will do.Stephanie:Thanks, Katherine.Katherine:Thanks.
In the wild world of ecommerce, the status quo is always changing. New companies enter the market to disrupt the norms. Legacy brands pivot to get a piece of the pie. Successful niche businesses get acquired left and right. With so much happening all at once, it takes a lot of work for brands to not only keep up but to get out ahead and win.Andrea Leigh and Melissa Burdick have made it their mission to stay on top of everything that’s happening and use their knowledge to help companies large and small make an impact in the market. Andrea, who you may remember from a previous episode where she discussed how to win on Amazon and the death of the category, is the VP of Strategy and Insights for Ideoclick, and Melissa is the Co-founder and CEO of Pacvue, a company that helps advertisers scale on big ecommerce platforms like Amazon, Walmart, and Instacart. A few customers of theirs include Unilever, Duracell, and Johnson & Johnson.These ladies each spent 10 years at Amazon “back when ecommerce wasn’t cool,” as Melissa says. Today, at their current companies, they work with disruptors and major brands alike as they come to realize that ecommerce is not just a fad, but the way of the future. And that’s why I was so thrilled to invite them on this roundtable episode to talk about all the trends they’ve been seeing recently, and to get their take on where things are headed. How are major brands moving to digital? Why are companies investing more in shorter product life cycles? What is the future of dropshipping and ad platforms? I wanted to know, and they delivered the goods. So sit back and enjoy! Main Takeaways:David vs. Goliath: In the world of ecommerce, it often boils down to small, niche brands competing against the bigger companies with a long history and much bigger budgets. In order to compete, small brands are forced to think differently, be more hyper-focused on product and customer feedback, and be intensely in tune with the ROI of any ad spend.Shorten That Lifecycle: Brands today are finding out the importance of being nimble and developing shorter product life cycles. When the unexpected happens, markets shift, or industry standards change, having a product already in process of a nine-month cycle puts you at a disadvantage to other brands that can pivot and change course quicker. Having a pulse on what consumers want, gathering data, and digging into feedback can help with the acceleration process.Show Me The Money!: In the past, measuring the ROI of advertising was a bit more challenging. Now, with the amount of data that you get from digital campaigns, measuring the return on investment of an ad campaign is much easier to track because you can correlate clicks and track customer journeys from ads. And with the number of new platforms that are constantly popping up, there is a bit of a new retail explosion that brands can take advantage of and track in unique ways. And today, regardless of the platform — new or old — brands will not advertise at all unless they can get a full view of the data and metrics from the ad platforms they work with.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey, everyone and welcome back to Up Next In Commerce. This is your host, Stephanie Postles, CEO at Mission.org. Today is a very special episode because it's our second ever round table and our guests are going to blow your mind or at least going to blow mine for sure. First up, we have Andrea Leigh who you probably remember. I think she was on episode 81 or so. She currently serves as the VP of Strategy and Insights for Ideoclick. Andrea, welcome.Andrea:Hi Stephanie, thanks for having me back.Stephanie:So glad to have you back. Your episode really was one of my favorites, which is why it's very clear we need to have Andrea back on the show. I think we even said that in our episode, so probably no surprise that you're here. All right. And joining Andrea and I is Melissa Burdick who serves as the president and co-founder of PacVue. Melissa, welcome to the show.Melissa:Thanks so much for having me.Stephanie:Yeah. We are excited for you to join our party. So you guys seem like you have some history. You seem like you're friends, you're in club house together. I was hoping to start there just so the audience knows who are you and how do you guys know each other. Andrea, you want to kick it off?Andrea:Well, I would love to tell the story of how I remember first meeting Melissa. We worked at Amazon together. I think this was in maybe 2006. She was the buyer for the health and personal care side of the business and I was the buyer for the grocery side. And we both negotiated with the same vendor, same brand that span both categories in the same day. We met in the kitchen afterwards and she had gotten such a better deal on her negotiation. Such better terms than me and I couldn't believe it because I was a total newbie and she was a really experienced negotiator. And so I made her teach me all of her tips and tricks. That's my memory of my first time meeting Melissa.Stephanie:Wow. Melissa, do you remember that day?Melissa:I didn't really remember it until Andrea told me and I didn't remember it that way. So it's funny the perception that she had versus what I had, but she and I both spent 10 years at Amazon. We were early pioneers of the consumables category back when ecommerce wasn't cool. And so we really got to do a lot of great stuff. I call it the cheapest MBA I didn't have to pay for working at Amazon, because we learned how to ship tubes of toothpaste probably. Well, I don't know if we've ever figured that out or will across the internet, but it really was Wild Wild West of ecommerce times and Andrea and I were there at the beginning and that's how we met each other.Melissa:We actually had a consulting practice together. We've been friends in the industry. Now we're competitors in some ways, but that's the beauty about our community and industry is that we're still friends. I tell brands, it takes a village to do ecommerce because it's so complex. And so having thought leadership and experts is what we like to do. So Andrea and I have a Clubhouse show that we do together and still keep in touch.Stephanie:Yeah, I remember when Andrea, we were like, who should we have on for a round table? And she brought you up and then when she was explaining, she was like, "Kind of a competitor to our firm, but we're friends and we work together." And I was like, "Whatever you want, girl. We'll bring her on if you love her." I'm sure I will too. So yeah, that's awesome. So, okay. I want to get into the topic. I know you all have a Clubhouse later on today that you're going to be hosting, which I think the topic that we're going to be covering there is perfect for this show.Stephanie:And like I said earlier, it'd be perfect practice all around how brands are going to market and how the world of ecommerce and commerce in general is so different now. So maybe Melissa, if you want to start with how do you even view the world now versus a couple of years ago? Like what's different? What are brands struggling with that maybe they never had to think about before?Melissa:Yeah, I mean, to the earlier point of your question, the moat is so much smaller now. The ability to create a brand is much easier. So years and years, 20 years ago, when ecommerce didn't really exist, it was, you're a big brand, you get into the shelves of a Walmart because you're tied or something like that. But with ecommerce and with more platforms and marketplaces, there's this ability to create a brand and a loyal following and base through things like social media, TikTok, or viral ways that you can build communities and brands.Melissa:And so today we're talking about a couple brands, DUDE Wipes, and Wyze camera or I guess Wyze actually they started with a camera. They both are emerging brands. They weren't the big P&Gs and Samsungs of the world. They built emerging disruptive brands and they've been very, very successful. And so that's a little bit about today's show. What about you, Andrea, what do you think about these emerging brands?Andrea:Yeah, I mean, I think another thing that has really changed is the ambitions of brands. So I think brands were to your point Melissa, they were built by large organizations and they were, you layer on this enormous supply chain and distribution and then a marketing engine on top of that in that order. And I think the two things that stand out to me as being different now with marketplaces is that first a brand can aspire to be smaller than that. A brand can aspire to just address a certain niche for a certain customer segment and do it really well. And maybe a brand wants to only be 100 million dollar brand versus a billion dollar brand and think that's posing some really stiff competition to some of the more established brands in the space, particularly in CPG.Andrea:So I think those brand ambitions are changing for sure. We did an internal panel with some clients and thought leaders and this was like a big topic there too, was these ambitions of brands and how they're different than they used to be. So I think that's a big one and then I think what those smaller brands can do better. And I think we've seen this with both DUDE Wipes and DUDE Wipes is that iterative approach to product development that incorporates the customer and their feedback. And so really thinking about why is this such a great example? They entered a super highly competitive market.Andrea:The category was already highly competitive with a lot of players and they just went in there and they did it better. And they did that because they were able to really listen to customer feedback, not just through reviews, but through all the social media channels and approach brand building in an iterative way. And so those are a couple of things that I've seen with some of our more upstart clients that have been really successful. That iterative approach and that really laser focused on a specific segment.Stephanie:Cool. So talk a bit about the ambitions of the brands. Do you think the brands that... like you said, maybe they don't need to IPO, they don't need to get acquired, they're looking to stay more niche and they're okay with that. Do you think they can sustain longterm because it feels like if you don't have goals to really make a mark, you're just going to get beat out by people who can spend a lot of money on ads and who just has a lot of other channels to create content and create content platforms. It's like they can do so much because of how much capital they have access to. What do you think about the brands who don't have those ambitions right now?Andrea:Well, I think for a handful of our clients, it's just a lifestyle business, right? We have a couple of brands who are a family owned and they've been family owned for generations and that's a lifestyle brand. They're running it because they have a lot of passion for the product or the category and they're product people. But I think in the other cases, they're mostly getting acquired. I mean, I think that's what we're seeing across the industry. They're getting acquired by a larger CPG. They get acquired by one of these newer FBA roll-ups or FBA aggregator companies that goes in and buys up all these small sellers on Amazon. But I think they get acquired. I think the challenge with that is that what I see is these CPGs either acquire them really early and then they try to scale it because most larger CPGs are in the business of scaling brands.Andrea:And so they try to scale it too fast, which kills what made the brand so special or they buy too late and they overpay. And so I don't think there's a super win-win there, but I mean, I guess it's a win for the brand because they walked away with a bunch of money. But I think that in terms of aspirations, maybe it still is to get acquired later or have investments or whatever, but still they're really focused on that segment that they're addressing.Melissa:The other kind of an offshoot of your question when you say, these brands don't have as much money to do these big TV ads. The other piece of that is they are extremely savvy and even savvier than these big brands to grow their brands. So they're actually able to do more with less because they're forced to. And so they have amazing product content or they figured out how to get to number one slot for their most frequently searched term because they understand the algorithms, they figure it out faster and they're more nimble and they have less of a portfolio to worry about. They just focus on a few products.Melissa:So they have a lot of benefits in that regard because they don't have that cushion and fluffy ad budgets and things like that to rely on. So they have to rely on having an amazing product, this iterative process of being able to mind keywords and understand, "Oh, this is the flavor that people are asking for. I need to go create this product." Product development takes a lot faster for them as well. And we've seen that with the Wyze. They're able to create more and more portfolio pretty quickly.Andrea:Melissa, do you think it's fair to say that some of these more disruptive brands are maybe more likely to channel their ad dollars towards the retailer ad platforms because they really need an ROI. For them to spend in some of the more sort of upper funnel activities might be harder.Melissa:Yeah. I mean, we see that especially with the seller marketplace. They are so ROI driven. It's all about if I pay a dollar, I better get a huge return for that dollar and ad advertising whereas these bigger brands are more focused on marketing their portfolio. And so they're much more focused on ROI of their advertising, whether it's anything from Google AdWords, Facebook advertising, whatever it is. They want real time data, real-time understanding of what's happening to their brand and it has to be profitable. And it's quite a bifurcation in how they look at advertising and marketing their products versus these bigger brands, which is more of a marketing play.Stephanie:Yeah. I think that agility to adjust and move quick is so key. I was just talking with a guest yesterday from a company Avocados From Mexico. Y'all ever heard about them? Wow. Their content strategy, like what they're doing. I mean, they've been winning the number two slot in the Super Bowl ads and her whole thing was like, you just have to be able to move quick. You need to be able to work with agencies who can try it on their own, run with creativity and just act quickly. And even when you don't have a budget, you can get scrappy and use organic growth hacky tactics to at least get up there in the beginning until you do have access to that budget. That was her number one thing though, move fast, try things out, fail quickly, and then iterate.Melissa:Exactly.Andrea:I just Googled them as we're talking and yeah, I can't wait to watch some of these videos. They look hilarious.Stephanie:Oh, her Super Bowl ad was so funny. I mean, all their stuff is funny. It was funny at first I was like, "Wait, why did Hillary schedule an avocado company for the show?" Americans super confused by this and I instantly got hungry, went out and started eating avocados. Once she came on I was like, "Oh, wow. They're a whole different level." Like you think about produce and a whole different way. I mean, they're doing AR stuff with their avocados. They're doing let's see, NFTs. They have been ahead, like years ahead trying stuff.Stephanie:I mean, they were trying NFTS and 2020 before it even became popular and they were trying to put ad campaigns on the blockchain. She was telling me a story about how they had an avocado Macy's day. What is it? Float. The only way the float would get there from Mexico to New York as if users would tweet about it. And so when you would tweet, enough tweets would happen and it would move the float to the next city. That's the only way it would ever reach New York is if they had enough engagement.Andrea:Oh, that's so fun.Stephanie:I know. It's so genius, but her whole thing was like, that's why you just try things and have that permission to experiment and a brand that can move quickly and not have to worry about competing top of funnel. Like you'd get it on that engagement level and scrap your tactics and you can win, which I think is awesome.Melissa:And I think that's harder for some of the larger companies to do, because I mean, even just that example you gave about like tweeting to get the avocado from city to city, which I think is hilarious and super fun. If that flopped, no one's going to say, "Oh, that dumb avocado company." It's just a memorable thing, but if it flopped and like, I don't know L'Oréal was doing that or something, I think it makes bigger, bigger news in not a good way.Stephanie:Yeah. Which always makes me think about the integration process of all these big brands are of course acquiring these hot D2C companies and it feels like there's so many out there right now. I mean, so many people come on our show and I always think like, "You're going to get acquired. You're going to get acquired." I mean, it just seems like that's the world we're in, but then figuring out how to integrate them into a culture, but not in a way that ruins it. I mean, have you guys seen good examples of that of companies who are acquired and then keep them in their own little startup hub of like, keep doing what you're doing. We don't want to ruin you.Andrea:I mean, we've seen it go both ways. So we have one client and I unfortunately can't share their name, but they were acquired by a really large CPG and they were allowed to operate separately because they're performing really well, but they're taxed so heavily by the rest of the organization because everyone wants to know how they're doing it. And so the amount of reach outs and coffee chats and all of that stuff and presentations and stuff that they have to give. I mean, it's an enormous burden on the small brand to try to teach a huge CPG how to be like them, you know? And I think that's hard. That's really hard for them.Andrea:I've heard that happens a lot of the time or they get folded in a little too quickly, but something that I was thinking about is what happens to the customer? Because a lot of times we buy these products from these smaller upstart brands. I mean, I think about like in beauty, two of my favorite brands are Glossier and Beautycounter and I love them. I love them partly because I feel like I'm supporting a company, well, at least in the case of Beautycounter, a company that stands for something which is like low chemicals and things like that.Andrea:I'm supporting their sales associate network and I'm supporting the smaller brand, but if they were to be purchased by like P&G tomorrow, I don't know at what my relationship with them feels like anymore. I'm not sure. I don't know. And so I wonder for some of these disruptive brands. What happens to that sort of authenticity and integrity when they're acquired? I don't know the answer to that.Melissa:The other thing that I've seen also is a lot of these bigger companies will siphon off people into a team of incubators and they just let them go. So they take them out of their company organization structure. Like you need all this approval process to go do your stuff. They then go create a direct to consumer brand or they're able to operate in that name nimble way. And they've been pretty successful getting learnings and trying to teach their organization some more nimble habits. So one route is buying the brand and then trying to keep them operating the same way and not to integrate it into that more bureaucratic process. And there's some successes and failures there. And then there's the big companies actually taking internal team to go do and not be subject to all the bureaucracy.Melissa:I've seen that as well, but I think the key that we all agree on is just this ability to be nimble, speed and if we've seen anything from ecommerce that's, what is the push.Melissa:So this nimbleness is something that's really important. In these product cycle times you need to get faster. And just the data like with this whole year of COVID when we're working with brands the question is, is this year I throw out your, because the behavior is just like totally off the chart. We know it's totally different. So how are you making decisions knowing that last year was not a good year to look at because things will return back to normal. How are you looking at it? And so getting faster at being able to look at data, to understand what's happening, knowing the trends of what's happening.Melissa:So the best example is like, MMM, Market Mix Models, where it's like, oh, from six months or a year ago, and you're making decisions on your media based on that. You can't do that. You can't look at six months ago because nobody's doing TV advertising because they didn't have any inventory. So you need to get much faster and that's what's really propelling more of this in this ecosystem. So I think we will see brands being faster because they've been given that inertia because of COVID.Andrea:Yeah, I totally agree with that. I mean, I read some study. I can't remember who put it out. I think it was McKinsey and they said something about, it was more than 70% of brand leadership said that they make decisions faster now than they did previously. I think you're totally right. You have to speak and COVID taught all these companies how to reduce their cycle times and be faster and be more diversified and all of those things. And I think those are the good things that we get to hopefully walk away from the pandemic with which are some changes to how decisions are made and things like that. And I would add to, Melissa, you talked about how these companies need to reduce their cycle times for everything, from budgeting to product development and I totally agree with that.Andrea:I think the other thing that these disruptive brands and particularly, Wyze and DUDE Wipes, is they incorporate that user generated content into their product development. So it's getting the cycle time down, but it's also figuring out how do you take all the stuff that people are saying about your brand in social media and in reviews and all these other places and incorporate that into your product development and your advertising and your content and all of that. I think the reason maybe that's some of the more scrappy upstart brands are better able to do that is because there aren't a lot of scalable ways to do that yet.Andrea:There are some tools that you can subscribe to and you can look across these channels and you can track your mentions and all that stuff but it's really a manual effort to be tracking a lot of that. And I think it's qualitative more than it is quantitative. And so I think some of those smaller brands that are still owner operator run just are more in tune with some of the sentiment of the customers and what needs to happen in the company versus maybe a brand conglomerate that has like 60 brands.Stephanie:Yeah. It also seems like bigger brands... I mean, I was talking with Stitch Fix a while back about how models can start running so quickly with training based off of how the consumers are feeling now, what they want right now and it seems like a lot of bigger brands do have access to crazy ML technologies and things like that to train these models to maybe make new product decisions, change their website every second based off how people are interacting with it. But I do also wonder, will we enter a year next year or the year after where it's like, whoa, what the people want now is not what they wanted two years ago and now all of our models have been falsely trained based off a two year craziness. I don't know.Melissa:Exactly. Yeah.Andrea:It's hard to look at anything. So much has changed in the world, I think in the last year that it's hard to look back at anything.Stephanie:What's real?Andrea:It's hard to go back and look at anything as a data point that's a predictor of the future. I mean, I think it's just really tricky.Stephanie:Yeah. I think about forecasting then that's my thought is like, I mean, that was exactly what I'm the VP of data science at Stitch Fix was talking about is like thinking about forecasting what clothes people are going to want and thinking about your inventory. And it seems like now you have to be able to shift so quickly, but then also you could be left flat-footed where you were planning for something that didn't end up playing out and people, all of a sudden want to be looking nice again, going out into the world, wearing high heels. I don't know. It seems like there will be a point when brands are like, oh shoot, I got to pivot again and get back to maybe our roots of where we started three or four years ago.Melissa:Yeah. And that's why it's all about-Andrea:... it's funny I would...Melissa:Yeah. I mean, it's art and science because the science, the AI models, they need data to work and they aren't very good with anomalies like COVID or like Prime Day or Sun Care member being like the sun care buyer and every single year at Amazon, we never bought enough Sun Care because it was like, couldn't predict that spike in the summer because the models were for the full year. But the modeling needs a lot of data for it to run. It doesn't do well with spikiness or anomalies and so that's where the art comes into play and the creativity you know, as well. So you have to think forward looking in terms of what are these trends, what are they going to be and Marriott together.Andrea:Well, Stephanie, you'd asked this in the beginning of what are some of the big challenges we're seeing across our clients and this one's not very sexy, but it's forecasting. It's so hard right now and they're all trying to figure out how do they forecast? Well, there's a lot of things you have to forecast. It's like, what are your year over your comps don't make any sense right now. I mean, it's like you can't even look at that. And so how do you forecast just demand on one platform because you don't know how much that platform is going to get, and then you don't even know how much of your business is going to be commerce, because that's all up in the air.Andrea:There used to be a pretty steady track of that getting a point a year or something like that. And now that's all over the place. Depending on the category you're in, you may be gain 20 points or something in ecommerce and then it's like, which retailer? It feels a little bit like a gambling exercise right now for these manufacturers trying to figure all that out. And then to Melissa's point, you have to line up an ad budget around that for these different retailer ad platforms and I think the forecasting is just so hard for them right now.Stephanie:Yeah. So let's talk a bit about the ad platforms and I know most of this right up your alley. So maybe you can speak a bit about how are companies thinking about ad platforms and approaching that? I mean, it seems like there's so much to pay attention to, so much to track, so much data. Like you're getting hit in the face all different ways of stuff now. What are you seeing behind the scenes when it comes to ads and platforms and how to go about that world?Melissa:Yeah. I mean, we've really seen an explosion of retail media. So it really started with Amazon, I think at this point, like five, six years ago when their app platform really started getting going, and Amazon makes a lot of profit from AWS and ads. And retailers can't really replicate AWS, but they can replicate advertising, which is great margin for them. And so just last year, we saw a launch of Walmart self-service ad platform, Instacart came out of nowhere. So to Andrea's earlier point, literally brands didn't have a budget allocated to Instacart and then off a planning cycle during COVID, this explosive new platform launches. Luckily a lot of brands had money because they weren't investing in TV advertising or other places. So they're able to allocate some dollars to it. But one of the big issues is nobody knows who owns the Instacart budget or platform, who's running that.Melissa:And then since then, there's just Criteo, what Target has launched, which is a slew of other retailers. So if you're not creating your own self-service ad platform like Amazon, Walmart Instacart you can leverage the network of Criteo who has Target and a bunch of other ones, CitrusAds is coming online as well. We went from not having a lot of retail media opportunities to advertise to now lots of opportunities to advertise with all kinds of different formats. And so it's a whole new brave world of trying to figure out where to advertise, but what I think brands believe is they want to be where their customers are. And so that's where it's really having a test and learn mentality of being able to get some of these test and learn budgets to see what's working well and get some data points and proof points and go from there.Melissa:And so that's where like tech stacks, like Pacvue or agencies who also have technology, like Ideoclick can help brands because they can help them figure it all out. And our value prop is really around unifying retail media so that you can see everything in one place, which is really important for these brands. So I think at the end of the day, you need savvy partners to help you, you need technology to help you, and then you need the strategist at your own company thinking through how to do these things.Andrea:Yep. I feel like right now all the money... and I also read that Dollar General recently launched an ad platform. That really surprised me.Stephanie:What? How [crosstalk] around really.Andrea:No, they did ecommerce. Sorry, Dollar General. [crosstalk]Melissa:How do you make money on that? Is that profitable?Andrea:I know, right?Stephanie:What are they doing?Andrea:It's pretty much like their value proposition is that everything cost less than $10 pretty much. So I don't know how they ship that online very economically. But in any case-Stephanie:$10. What? That cost will be less than a dollar. What happened? They really lost sight of [crosstalk].Andrea:Inflation. I think in the short term where the ad dollars are coming from. They're coming from the other ad options, like the theatrical releases or out of home advertising and TV and billboards and all that stuff. But when people start leaving their houses again, how much of those ad budgets go back to some of those more, I don't know, non retailer ad platform ad types and how much stays with retailer ad platforms. And I predict that a lot of it is going to stay with the retailer ad platforms. I think the reason is the metrics and ROI that you can get from that is like crack for marketers.Andrea:I mean, I don't even know how you would go back to spending on advertising where you don't get ROI metrics. I mean, I remember when Amazon advertising first launched, and that was one of the first performance marketing retailer ad platforms that you could work with and the reaction of the manufacturers just being like, "Oh my gosh, I can directly see a correlation between what I spent, who clicked on it, how many people saw it and then how many people bought it." And so I just don't..Stephanie:Wow. What does the ROI look like because I'm not deep in the ad world. So I don't know how to think about what retailer ad platforms looks like versus traditional. So how do I envision what you're getting in that world that you wouldn't be getting otherwise? What is that ROI look like or what are brands getting used to now where they're like, this is the only way I would do it going forward.Andrea:You want to take that one, Melissa?Melissa:Yeah. Well, I mean, I think traditionally if you're doing normal advertising, you're more focused on impression focus, right? You're really trying to get impressions. You're not tying back to sales of a product. And so in ecommerce, there's a direct tie back to, I spent a dollar, I got $5 of sales and there's like a brand halo associated with that. And so that tie back where I put an ad, if you leverage Amazon DSP, which is their programmatic display advertising, that's retargeting. So you can target to people who are looking for men's shoes within this certain zip code who shop Nike, but didn't buy it in the last 90 days.Melissa:You can get very, very specific targeting. You can show them an ad, drive them back to Amazon, to your product and then you actually know if they bought that product or not. And the actual sales attribution and return that you got from that versus just an impression buy like a Super Bowl buy, right? Where you've no data to say, "When I do a Super Bowl ad, you can try but there's no actual ROAS, return on ad spend that you get that correlates directly to an ecommerce sale. But I do think that media... people are doing all of these things, because some is upper funnel where you're more branding dollars and some as much lower funnel, direct marketing, that's conversion to a sale.Melissa:And so that's where these bigger brands are like, if there's a new product launch, you've got to get people to know about this product. So you might do like during the Super Bowl, the Super Bowl ads are like everybody's watching the Super Bowl and this year they had some weird like caveman soap. I can't remember the name of it, but on their Superbowl ad and so that was really to get attention and drive traffic to awareness of their brand. But not tied to specific ecommerce metrics.Stephanie:So how have you seen brands changing the way they're thinking about ads in a way that's focused on first party data collection, really trying to create that relationship from the start where maybe they weren't always thinking about this before. Have you seen brands shifting their mindset around creating an ad that maybe has the focus on that now?Melissa:Well, I mean, with all of the things happening within the privacy world where third-party cookies are going away. First party data becomes more important and so I think that this benefits platforms like Amazon who have a significant amount of first party data and hurts platforms like Facebook that rely on more cookies. But I think brands in general are really trying to build their own databases. So a lot of them have publicly talked about building direct to consumer businesses so they can own their customer. And so I think that they view first party data, building their own CRM and their own databases pretty highly. I don't know what have you seen Andrea in terms of brands that you work?Andrea:Yeah, I've seen the same thing. I think a lot of them are building their own CRMs, trying to figure out how to access more direct customer data. We talked about how it encouraged a lot more speed of decision making. I think it also encouraged a need for diversification in all ways like manufacturing and the ecommerce platforms that you sell on and how you source the product and I think diversification is really important. And I think there are a lot of manufacturers who've been feeling a bit squeezed by Amazon and it's nice to have options to have a D2C site. I mean, the D2C thing, I think is like a whole other topic, but I do think it's a lot more expensive to drive traffic to those sites. You're going to get a lot.Andrea:It's not going to be a hugely accretive to the business in the short term, but I do think it gives you access to your own customer data, which is, it can be a really important point of experimentation in a sandbox for manufacturers to really see what kind of marketing is working for them. So I've certainly seen that and then I think just looking across the retailer ad platforms, I mean, we've seen a push onto all platforms for a lot of our major manufacturers and wanting to access... If the customer's cross shopping, maybe it's the same customer, but also access different customers that are shopping across different ad platforms to Melissa's point earlier about wanting to be where your customers are.Stephanie:Yeah. I love that. So the other day, Andrea, I was creeping on your Instagram, I think I was. And you were talking about omni-channel strategies and drop shipping as a catalyst for growth. I thought that was interesting because I feel like when I think about drop shipping, it's had this like crazy heyday drop ship, white label, everything. No one has to know who you are. You don't really need a brand. And then no one was really doing that anymore. It didn't seem like there was margins there to do that anymore or people really want to connect with a brand.Stephanie:Like, especially now everyone wants to know who's behind that brand, the story, they want to feel some connection with them. And when I saw you mentioned drop shipping, I was wondering, how are you guys viewing that? Maybe it's always been around and that's just my personal narrative I've written around it or how do you see brands maybe leveraging that right now?Andrea:Well, I think of drop shipping a little bit differently. It's still the brand. They're just bypassing the retailer and they're shipping directly to the consumer. You can do that as a seller in your own right on the marketplace platforms or you can also just do that behind the scenes. And there are a number of categories that are high percentage drop-ship and always have been. It's never going away. It's just not obvious to you as a customer. So shoes is a great example.Andrea:Those are often coming directly from the manufacturer. That's an industry that's been pretty heavy drop-ship for a long time and mainly because so much inventory, you have to carry. There's one style and then there's five size color combinations. And so it doesn't make sense to ship all that to a retailer and then have them re-ship it to a customer and try to keep the inventory levels right.Andrea:So shoes has always been a really big drop-ship business. If you pay attention to the stuff you get from Nordstrom and others, you'll notice that it's often coming directly from the manufacturer. Sporting goods is another one. Some of the bigger bulky categories have been traditionally drop-ship because you don't want to ship like a treadmill to a retailer district warehouse or whatever. It does expose the retailer to a degree of risk because you're not packaging the product. So you lose a little bit of control over the quality, the consistency of the customer experience. I think what I posted was that Nordstrom was going to try to open up more assortment through ship.Andrea:It's a little risky. I mean, I don't think it's highly risky, but I do think it presents some risk in losing control over the customer experience, depending on if the retailer is still deciding the assortment, you could lose a little bit of your credibility as a retailer. I mean, I think part of why customers are starting to shop a lot of places besides Amazon is for the curation. Is because it's a little bit of an easier shopping experience.Andrea:I would much rather shop for shoes on Nordstrom where I know that someone actually made a decision to carry each of those products versus on Amazon where it's the wild west and it's just overwhelming. So I think a lot of these retailers that are competing with Amazon and doing well with it right now, I think are doing it well because of the curation. And if you open up those retailers to just unlimited drop shipping with the brands, I think you just lose a lot of that value proposition.Stephanie:Yeah. I agree. I mean, it seems like the AMSEC could just come in and just have a curated collection and maybe they're already doing this. This is the Radan collection, this is the [inaudible] and like, you go there knowing what you're going to get, because I thought the same thing. The other day I was trying to find, I don't know, some piece of yard furniture and it was so overwhelming. I was like, "Oh my gosh, there's so many egg chairs. I know the egg chair I want, but there's so many." 90% of them are not egg chairs [inaudible] is and I just went to Walmart and they had the exact what I wanted, which I found through an influencer, or I would just go to West Elm. I just feel like they have the exact selection that I want. I'm not going to mess around, but it seems like they could come in really quick and change that if they wanted to.Andrea:They can't. it's so hard. I mean, they have a one size fits all platform and it's heavily search-based. And I remember, how do you say her last name Melissa, Kathy who used to lead soft lines at Amazon? Kathy Boudin. Well in any case, sorry, if I'm mispronouncing your name, but I remember hearing her say, in all hands one time, she was like... They came in and I think Amazon fashion had its best a couple of year run. They really created some curated lists and some storefronts and they started the Amazon Delivers for fashion and I thought it actually was really good stuff. But she said, "It's a thin veneer that we've put over the site." I remember her saying that. It's a thin veneer.Andrea:And once you scratch it, you see just all the assortment and everything that's there and it's overwhelming. I keep a little like goofy quote lists that people on my team say and this guy in my team, Jamal the other day. I can't remember the context, but he said, "If you're going to go shopping on Amazon for a Teddy bear sweatshirt, I'll see you in a week."Stephanie:That's so true.Andrea:I don't remember why someone was shopping for a Teddy bear sweatshirt or what the context was, but it cracks me up because it's so true. I mean, you could spend a week just combing through, even for something super specific like that, a Teddy bear sweatshirt. You could spend a week just coming through this.Andrea:There's this S&L sketch about Netflix, but I highly recommend that you watch because it's like a fake ad for Netflix, but it says, it's the endless scroll. "By the time you get to the end of the scroll, we've added and created new content and so it's the infinite loop." They call it an infinite loop. And Amazon is like that. By the time you get to page 10, they've probably added more assortments. So it's never...Stephanie:Yeah, people are working in the background. "She needs 10 more of these, keep going." Oh my gosh. All right. So I know you guys have a hard stop in a couple of minutes on Clubhouse and maybe I'll even try and join you over there, but I do want to get one last question. Usually I do a quick lightning round. Lightning round is brought to you by Salesforce commerce cloud. But for this one, each only get one question because we're on a time crunch. So Melissa, we'll start with you and it'll be the same question. What one thing will have the biggest impact on ecommerce in the next year?Melissa:Oh, man. That's a hard one.Andrea:Yeah. I'm glad I get to go second.Stephanie:Andrea already had to do it once on her last episode and it can't be the same answer, Andrea.Melissa:What's going to be the biggest impact to ecommerce in the next year?Stephanie:In the next year. Yeah.Melissa:I mean, we already had COVID so that's what had the biggest impact on ecommerce? I guess, I mean, maybe it's a ripple effective. I'm going to have to say COVID because that has had the biggest impact on ecommerce because it's accelerated it so much with new people especially at different age brackets. The older age bracket is shopping online and so we know the baseline is never going to return back to where it was and it has changed behaviors and it will be accelerated. The other interesting thing, I just notice this when I walk into a beauty store, like in Ulta is that beauty used to be a way better experience in store than it was online. Now it's the opposite. It's way better online.Stephanie:I order from target all the time, just directly from Target because I'm like way better than going in store.Melissa:Because you can have virtual reality, but what's this color going to look like? When I walk into an Ulta, everything's taped down, you can't try on anything. You can't see the format of anything. I don't know how much of that's going to return. I don't think people are going to be very comfortable trying, like picking things up that other people have touched for a very long time. I don't want to.Stephanie:I never wanted to. I never wanted to try lip gloss. I'm like, how many... thank you.Melissa:I think the interesting, and then Amazon announced opening a hair salon where a lot of it is going to be tech focused around what's this color going to look like. Virtual reality of hair color. So I think that Cover Desk has accelerated this complete change in behavior lifestyle. And the other thing is, I don't know if I'm ever going to wear jeans again. I might just wear my VRA joggers to work if I ever go back to an office.Andrea:There's a great YouTube video on how to dress up joggers, that I'll send you.Stephanie:All right. Andrea, you're on the hot seat.Andrea:Okay. I'm going to go with social shopping and live streaming and I don't know if it will be in the next year, but I think it is going to be the biggest disruption to ecommerce because it is going to start taking the transaction or at least the beginning of the transaction off of the ecommerce site and onto social media. I know that I don't have a lot of agreement on this in the industry. A lot of people are like, "Oh, it's going to take longer or like people aren't going to shop on social media," but I'm feeling super bullish on this. And I think it's primarily due to my own behavior, which is that I am almost exclusively buying things that influencers have recommended to me and it's a super clunky experience. You have to go down to the bottom of the YouTube show notes and find the top she had on and it's annoying and I'm still doing it because it's preferable to the endless scroll of Amazon.Andrea:So I really think that that is going to be a huge disruptor to ecommerce and have a big impact on it. Although I was wrong about this once before, I helped start a company, I guess it was like 15 years ago now. It was about social shopping. It would like loud allow it. It was kind of an old version of a screen share before we had screen shares, but it allowed you to shop reseller websites with your friends.Stephanie:That was awesome [crosstalk].Andrea:It took a long time to get it off the ground and we eventually sold it to Nordstrom for their style boards, which is a very different application than what we originally went into the idea with, but I still feel super bullish on this. People prefer to shop together or they prefer to feel like they're shopping with someone in the case of like the curation from influencers or whatever. I'm feeling bullish on social shopping and live streaming.Stephanie:I will 1000% back you up on that because yeah, almost all my shopping behavior comes from influencers and I will go through all the hoops and hurdles to try and find something even through that, dang, like to know it app, which is horrible to work through. You're like, "I'm just trying to find my shirt." And then you're like bouncing around like 10 different apps and it throws you over back to Nordstrom and then you're back again. It's not fun. So I hope that process gets easier.Andrea:I'm a huge fan of taking the screenshot and using Google lens. I don't know if you ever do that.Stephanie:I don't do that.Andrea:If you can't find it, Google lens is... I don't know that that's their intended application, but it's really, useful.Stephanie:It is today. That's great. All right. Well, I really think we need to have a quarterly round table. This is super fun having you both join us and yeah. Where can we find out more about you, Andrea, Melissa? Where can we find about Ideoclick and Pacvue?Andrea:Yeah. Well, you can follow me on LinkedIn. I post and write a lot about ecommerce there or on my website, andreakleighconsulting.com and you can learn more about Ideoclick at ideoclick.com.Stephanie:Melissa.Melissa:Ditto. LinkedIn, you can find me Melissa Burdick there. And then pacvue.com. P-A-C-V-U-E dotcom. Yeah. We'd love to hear from folks or you can find Andrea and I in Clubhouse later this afternoon.Andrea:Yes, four o'clock. After this'll air, after that.Stephanie:Yeah. You guys are giving a preview of this, so, yeah. All right. Thanks so much y'all.Andrea:Okay. Thanks for having us, Stephanie.
Lindsay McCormick knows a thing or two about pivoting. After all, she went from planning to live in a van and travel around the country selling her sustainable toothpaste bits to launching a transformative and still-growing company that has taken the internet by storm and has left the big brands shaking in their boots. Bite Toothpaste Bits was the company Lindsay never meant to start, but a viral video helped launch her full-time into the world of ecommerce after she went from 6,000-lifetime sales to 200,000 in a single week. Needless to say she could no longer manufacture everything from her living room, and instead was thrown into the deep end trying to find production and shipping partners that could not only make her very specific products, but do so in a sustainable way that stayed true to Bite’s ultimate mission. There were challenges around every corner, but Lindsay navigated through them all, and on today’s episode, she shares that rollercoaster ride of a story . Plus, she explained why she thinks it’s so important to keep content creation in-house, the reason she’s always testing new channels and leaning into video content — I mean, it is what launched her company — and she reveals why she’s not scared at all about the big-name manufacturers making copy-cat products, in fact, she’s excited about it. Hear all that and more on this episode!Main Takeaways:Don’t Fight The Fog: Breaking into new channels means divorcing yourself from KPIs and metrics and walking into foggy and unknown territory. Embrace that journey because not only will you eventually be able to measure success, the opportunity cost of not taking the risk is too costly not to try.Pay It Forward: Going viral comes with its pros and cons. While the huge boost in sales is a dream come true, fulfilling orders becomes a major problem that has to be solved quickly or you risk losing all of your new customers. As a sustainable business and a small business at that, Bite fought many battles to find manufacturers and fulfillment centers to partner with that met all their needs and price points. As Bite has gotten bigger and found the right partners, the company has also outfitted those partners with some of the tools that they can use to help support and grow other small businesses.Teach Me Your Ways: Educating consumers is one of the most important things an ecommerce site needs to do, especially when the product offered is something that requires a change in habit and/or expectations. Customers who take the time to learn will be more likely to repeat orders, and they will also be more likely to be understanding of things like extended shipping times.Make Em Sweat: It can be intimidating to go up against giants in an industry, but showing even a little bit of success in grabbing market share is something that will leave those big guys feeling pressure to make a change. Not only should that be encouraging to you as a disruptor, but in the world of sustainability, when the big guys start making changes, the small impact of a disruptor grows exponentially.For an in-depth look at this episode, check out the full transcript below. Quotes have been edited for clarity and length.---Up Next in Commerce is brought to you by Salesforce Commerce Cloud. Respond quickly to changing customer needs with flexible Ecommerce connected to marketing, sales, and service. Deliver intelligent commerce experiences your customers can trust, across every channel. Together, we’re ready for what’s next in commerce. Learn more at salesforce.com/commerce---Transcript:Stephanie:Hey everyone, and welcome back to Up Next in Commerce. I'm your host, Stephanie Postles, Co-founder and CEO at Mission.org. Today on the show, we have Lindsay McCormick, CEO and Founder of Bite Toothpaste Bits. Lindsay, welcome to the show.Lindsay:Thanks for having me, Steph. I'm excited.Stephanie:Yeah, I'm super excited to have you on here. I was looking through your background and it looks very interesting because I've never had someone on the show who had a background in production, working on HGTV shows, like all my favorite things. I was hoping we could start there where you tell me a little bit about how did you get into the world of TV and YouTube and what was that like? Then we'll talk about your company afterwards.Lindsay:Yeah, for sure. I didn't actually mean to start a company, which we can definitely get into, but I was working as a TV producer on the show House Hunters, and I was traveling all around the country filming. Whenever you're filming that show, you'd only be somewhere for a few days. So before I got into TV, actually, because I wanted to make nature documentaries and documentaries before even getting into TV, I was a surf instructor and snowboard instructor. On the off season, I would travel and make YouTube, little YouTube videos. That was like, oh my gosh, back in 2011, 2012. It was like at the beginning of YouTube and the beginning of all of these putting stuff online, and it was really fun.Lindsay:But through working as a surf instructor and snowboard instructor, I was seeing the plastic washing up on my surfboard and the climate change impacting our mountains. I wanted to get into media. I had been really, really influenced by a lot of documentaries. At the time back, it was like Blackfish where about really mammals [inaudible]. I was like, "You know what, I think media is this amazing way to tell important stories and I want to learn how to do that." I started at the bottom, I was an assistant and I was making nothing, working insane hours, but I loved it. I worked my way up over the years and then actually got to be producing. I went from shows on Travel Channel to then HGTV. That's what I was doing before Bite.Stephanie:That's amazing. What did the day-to-day look like as a producer for things like that? Because I watched House Hunters, I watched all those shows. What were you actually doing? I saw that you even did branded integration, which to me is very interesting and I want to hear what did that look like?Lindsay:Yeah, I loved it. It was so fun. For branded integration, that was different. I had previously been what was called a show producer on House Hunters. All the shows are they're all different because they need different things. But, basically, you're in a producing team and your team is responsible for an episode, and you basically like there'll be certain amount of teams and you just volley around the episodes. Like your episode one, then another team's episode two, episode three, episode four, and then you come back and you're episode six. You're like one, six, 12. Basically, you're responsible with your team from start to finish to make the episode.Lindsay:It's that would be for show producing I was helping, basically, it's funny because it's actually really similar to running a company because you're just trying to make sure everything happens, get everything together, deal with all the fires that they pop up. I had great bosses, the best bosses, I learned a lot from them. Then for integration, so that's something that I saw a huge opportunity in, and it was basically so now that people are fast forwarding through commercials or in that team going, "Oh my God, what am I in the '90s?" [crosstalk]. Yeah.Lindsay:It's commercials are important, but they started doing something, it was basically like a new work for product placement. That, actually, helped me a lot too now, like that I have a company, because it's understanding how to organically integrate a brand with an episode. So that was my job where basically there would be brands that were paying the network an enormous amount of money to be integrated into the shows that I was working on. I would be the ping pong ball going between the brand and the network and our production company, and actually being on the field and making sure it all happened. And being able to take these abstract concepts that we had figured out and make sure we hit all of the marks to get every shot that they wanted, and then deliver it to them so that it gets placed into the episode.Lindsay:That was something that is really helpful because now we're making videos for our company and I'm like, "Well, we need this, we need that. This is how we're going to experiment and this is how we know if something's working or not." Branding integration, and now it's like content in general. When I was working on that a few years ago, that was like a separate thing, but now it's everything is branded integration. I feel like there's brands are integrating into all this content because they have to, it's so fragmented. Yeah, that's the whole long thing.Stephanie:I love that.Lindsay:[crosstalk] background, but then somehow all came together.Stephanie:Oh my god, I love the background. That's why I was really excited for the show today. When I'm thinking about branded integration, I always think there's still so much untapped potential when it comes to content. We've had a couple people in the show who are essentially creating their own shows and movies and all of that. It's maybe 80% about the story and then they, of course, have their products in there as well and really cool stuff. How do you think about success when it comes to that? When you're talking about now working on that for your own company, how do you know what could be successful, what works? How do you go about approaching that?Lindsay:It's so important. It's so important, and we started from a video. I had selling Bite online. We had a little bit of traction with some vegan and zero waste bloggers. We had a video just go insanely viral on Facebook, and that's really what launched the company. It was like I already knew video was important and now it's literally the whole reason that company exists type thing. For us, we take content and video very seriously. It's not something we outsource. We're an incredibly small team and we still do all of our creative in-house. It's all either being done like the story and everything. Because it's, for me, it's about being able to take sustainable... Like sustainability is an incredibly nuanced topic that has so many details that you have to dig into. But you have to be able to communicate it in a very easy way.Lindsay:I think that it takes a lot of thought to be able to do it in an entertaining, but also truthful and authentic way. I think that's where my background comes in of being able to be like, "How do we take this and basically distill it down into the most digestible way?" We put a lot of time, and I think any brand that's growing right now have all of the things that you outsource. I see it a lot, I'm in a lot of entrepreneurial groups on Facebook and everything, and everybody wants to outsource their creative because it takes so much freaking time. But it's like the last thing you should be outsourcing because it's literally your brand, it's your brand, and it's your vision and it's your voice. I give major props to the brands who are still doing it in-house.Stephanie:Yeah, you're fully leaning into that. You've got your YouTube studio that you're creating. I feel like you're living by that truth, which is great. Let's dive in a bit into Bite Toothpaste Bits, tell me what is the company? I also would love to get into how you started the company? Because I think it's such an interesting story about buying a van and being ready to go all around the country and just having this toothpaste idea and selling on Etsy. I want you to dive into all of that because I think it's really fun.Lindsay:Yeah, and I love, you have done more research than any, I love it, everything in advance. Because I was traveling and I couldn't find an alternative, and it was from that, it was from throwing out those little toothpaste tubes where I was like, "Hey, wait a minute, I have..." When I traveled for my shoots, I had a little go kit. I had my shampoo, my conditioner, my face wash, my body lotion all in a reusable thing. Because I didn't want to use the hotel stuff. I knew that, that was wasteful. But then I was throwing out my toothpaste tube every other week, and I was just like, "This is like a thick plastic. This is not cool." I started looking into alternatives and that's when I learned about all of the harsh chemicals that are in there where it was Sodium laureth sulfate, PEG, artificial dyes and flavors that I don't even use in my body care.Lindsay:I was like, "I'm using this in my mouth. What the heck?" Plus I'm vegan, and I found out that a lot of the stuff, a lot of commercials do these tests on animals and I was like, "Did not know that." So that was the, "Whoa, I want to make sure that this is something that I'm doing everyday twice a day. How can I do this better?" I couldn't find anything that checked all my boxes, and so I started... I think in typical producer fashion, it's like you find one little thing and then you just get obsessed with it and then expand. Originally, I didn't want it to be a tablet, I really wanted it to be like I was trying anything besides a tablet because I didn't want to have to buy a tableting machine.Lindsay:They were even $1,000 and this was supposed to be a hobby, and that seemed pretty obsessive. I was just like, "Lindsay, you have to calm down. You're not going to spend $1,000 on a hobby." I ended up taking online chemistry classes and then talking to dentists and dental hygienists like on Facebook, whoever I graduated high school and college with.Stephanie:I thought you were on Reddit threads trying to figure out the chemistry of toothpaste?Lindsay:Yeah, and I was on Reddit threads trying to figure out how to make drugs because once I realized that I had to make a tablet, I was like, "Shoot, how am I going to make a tablet?" Everything that I was finding online was big industrial like $100,000 machines. No one was giving instructions on how to use the little machine, so I was like, "Who is using these little machines? Who does this?" I was like, "Oh, yeah, drug-Stephanie:Drug dealers.Lindsay:... people who make drugs." I was on Reddit being like, "How do you make ecstasy?" But I'm sure I'm on numerous-Stephanie:Watch list.Lindsay:... FBI watch list, for sure. Well, and even when I bought my machines, I actually had to register with the DEA because the machine that you get, the little TDP-0 and the TDP-5 is so used in these things that they want to track them, which I think is great. But I was just like, "This is crazy. What world am I in?" That was the beginning of that, then figuring out how to make tablets and toothpastes, and it was like, "This was for me." I figured my parents are very supportive, they would use it, and then my friends who also care about the environment, they would. It also needed to be effective. I'm not going to be giving this all to people that I love and then ruining their teeth. It was really there were a lot that was high stakes for me to make sure that it was good. That's how it all started, just in the living room, like bottling everything myself to working this machine.Stephanie:Then you want to go and you buy a van. You want to be going and traveling the country in your van, and I guess the plan was just to sell on Etsy and your friends and things like that. Then what happened?Lindsay:I was fully anticipating, I have a photo of me holding cases of this Vegan Ramen. Because I was like, "I'm going to be so broke. I'm going to start my own business and I'm going to quit my job in TV, where I was making good money and my boyfriend and I are literally going to live in a van." We bought a van, we signed, it was the biggest purchase I'd ever made. We bought this on... It was, what is it? 4/4, no, 8/4, so August 4th we signed the paperwork for this van and started ripping it apart because we were going to turn it into a tiny home. I was in, then I was going to quit my job and we were going to start selling. Then August 8th, Bite went viral, and all of a sudden-Stephanie:Wow, what happened?Lindsay:... it was like the video on Facebook.Stephanie:It was a video?Lindsay:Yeah, so at that was that point, we had the vegan community talking about us and the zero waste community talking about us and women's health had reached out and was like, "Hey, we're featuring women businesses trying to do really cool things. Could you shoot some stuff on your iPhone and tell us about your story and we'll put a video together and we'll probably put it on our Facebook." I was like, "Yeah, no problem." Literally, shot it at 6:00 in the morning before shoot. If you look at it, my hair was terrible, I was barely wearing any makeup. I was on my way to LAX. It was in the bathroom before I went to LAX. Then I didn't hear from them for like a month and a half, nothing.Lindsay:Then on the 8th, my phone started going so crazy with ching, ching, ching, I thought we had gotten hacked or there was an error or something. But it was basically what had happened is that the video had gone up on Facebook a few hours before and just went full steam viral. We went from I had done $6,000 in sales the whole year prior to over 200,000 within a week and a half. It had two million views within the first eight days. Then what happened is that ripple, so then it was like Business Insider wants to make a video and everybody now is calling and I'm just like, "Okay, we're going to make the video, yes."Lindsay:We're just pushing out and then, basically, then what happened too is that the women's health video happened and then it did so well, it got syndicated through Hearst outlets, online outlets. Then it was like Cosmo, Oprah Magazine, all of these started playing it. Then that's, basically, that was the company. That's when we started, and then [crosstalk]-Stephanie:Like that is my van life plan.Lindsay:Well, yeah and I was just like, "Oh my god, we literally moved in with my parents." Because we had already put 30 days in on our house. We had moved and everything and it's just like, "Okay, this is crazy." Yeah, it was definitely, the van, we still have the van. It's beautiful and it's sitting in Pasadena not used.Stephanie:Wow, that's such a fun story. I was getting goosebumps thinking about all these orders coming in. So what was the content in your video? Why did it resonate with people so much? What were you talking about?Lindsay:I think what the was, was just talking about these toothpaste tablets and the problem with toothpaste tubes. I think that was something and it was very much like it showed me in my living room with the machine and it just explained what was in the tablets. There was really nothing special about the video and we've seen other brands in our space try to make it almost frame for frame and it doesn't have the same steam at all. But I think it was just the right video at the right time with the right message. Then I think also is that once that happened, nothing about that video was big. Every single thing is like you go to our website and we've listed out, we're incredibly transparent.Lindsay:Now we're finally getting all of our certifications but we've been doing it even before. It's like palm oil free and all these different things. I think that what it was, is it really just spoke to those people who wanted to be able to make a change and just didn't have an easy way to do it. I think, I guess we didn't even really talk about our product, but it's a dry toothpaste tablet and it comes in a glass jar and then compostable refill pouches. Now that's actually like the refill system is super everyone's doing it in a different way, but we were, definitely, we were the first ones to do it for toothpaste tablets, and one of the first to really get that mainstream in personal care.Lindsay:I think that it was just people were like, "Oh, wait, this makes so much sense." We see comments all the time on it being like, "Why didn't I think of this?" You're like, "Yeah, I know because it's so obvious." But we didn't, no one thought about it, so yeah.Stephanie:That's so fun. Also just your energy and your vibe and that's probably why the video did well. They just see you and they're like, "Obviously, Lindsay is the best." And act surprised.Lindsay:I think maybe I come off very unintimidating and I think people like that. Because it's just I think, and that's something too, and I say this, if I can figure this out, literally, we all can, we all can.Stephanie:Okay, so you have that small scale operation with your tablet maker and then you start getting all these orders. What did the backend look like to keep up with, I think, you said 200,000 in orders in a week or something? What did you do when the prior year you only had 6,000 in sales?Lindsay:It was literally the most stressful point in my entire life. I had, had one panic attack in my life before that and they became a bi-weekly thing and I was just like, "What have I done?"Lindsay:It was insane. Luckily, my boyfriend, who is now my co-founder, we've been together for six years and he has a business background. He was actually running a startup at the time, which we didn't even get into. His startup had to get shut, like they shut down the week that we went viral. Totally unrelated, and so he had a venture backed startup and that was his jam. Then it just sometimes they work, sometimes they don't. There's some time it didn't work, and so he shut it down the same week that we went viral. Luckily, he had to-Stephanie:Good timing.Lindsay:He had time on his hands and he knew how to do this, and so basically he started running the war room. I'm sitting there making the tablets still and he was just like, "Stop making the tablets. You will never be able to make these tablets." He's like, "We need to find a manufacturer. We need to do all of these different things." That's what we had to do. We were back-ordered for two months I was sending out these pleading emails to our customers just trying to explain what had happened. We found a manufacturer, we had to find a fulfillment center. I was still shipping these out of my house. Then we also had to get business insurance. We had to basically set up a company immediately, and we did.Lindsay:It was really stressful, really crazy. My mom actually flew in from Virginia to help. Because, at that point, we had, had to leave our place in West Hollywood because we were going to live in the van. Then we moved in with Asher's aunt and uncle, and then my mom flew out to help, and then we moved in with my parents because we were like, "What family can we live with?" Because we had totally screwed this up. When I look back at those times, it was just it was so unexpected and amazing. It felt like I had this, all up until then, I had this baby bird of a company that before it went viral, I'm trying to keep this thing alive and feed it and nurture it and love it.Lindsay:I feel like as soon as we went viral, it was that baby bird was actually a Pterodactyl or something, and it grew and immediately was trying to eat me. We were just like, "How do we make this work?" Now I definitely feel like we're working with the Pterodactyl. We all understand each other, and it's definitely working way better.Stephanie:That's so fun. Did you keep that, like the growth that you had from that first week where you were like, "Whoa, 200,000," and that week, did you continue that growth and where are you guys at today and how big is your team?Lindsay:Yeah, so when that happened, then the next question is how do we sustain this? Because there are so many companies that have the blip and then go off forever. We were like, "We do not want that to happen." Luckily, we had a Facebook pixel set up. We had all of our tracking set up, so we could do retargeting, which is so important. We were able to just keep the momentum. From that, we were able to do Shark Tank, from that we had way more press opportunities happen, and so we were able to just keep feeding this cycle. We ended up having now this, which is a new site. We were the most cared about video in 2019. Those kinds of things just keep on going, going, going.Lindsay:Then in 2020, I was one of Fast Company's Most Creative People in Business, which also then gave us, for the first time, like street cred, real cred in business. It all just fed into each other. We were, in 2019, there were two of us full-time, and by the end of 2020, there was five of us full-time. By now, in 2021, we're nine and we'll probably be 11 by the end of the year. We're keeping it small, but growing.Stephanie:Yeah, very cool. You got an offer from Mark Cuban on Shark Tank, but you turned it down. What was the thought process behind that and what was that experience like?Lindsay:He's so amazing. I can't believe I turned it down for Mark Cuban, an actual billionaire. When we went on Shark Tank, we had our like what we were going to do and what we were going to negotiate. I, basically, was I knew it was going to be a whirlwind and emotional. My background's TV, it's a high pressure situation and I knew that. I was like the only thing that I can do is... Asher and I had decided what our negotiation was before that, and if we went, we couldn't go over. We were like, "If it goes over, we have to say no," and we couldn't get to where we needed to be, and so we had to say no. But it was also we went on there. The name of the game on Shark Tank now, looking back, is definitely negotiate.Lindsay:We went in being like, "We want a partner, so we don't really want to negotiate." We just want to be like, "Hey, this is what we think is fair." But I think that's not really how the Shark Tank thing goes. But it was such a fun experience.Stephanie:Yeah, that's really, really cool. Now where you guys are at, how do you go about advertising and marketing? How do you get in front of new audiences and keep finding... I mean retaining your current customers, but also finding new people? It sounds like Facebook, you guys are there, you're doing re-targeting. What other channels are you exploring and finding success with now?Lindsay:Yeah, that's the game. It's always finding the new ones, and so I actually put a lot of my time into that. We were on TikTok before many brands were taking it seriously. We're on Clubhouse literally all the time. It's so fun, and we're constantly testing out things while optimizing our bread and butter channels. I think that that's something that is really, really important to do. No matter how big or small you are is to just constantly be trying to have the pioneering spirit on the new stuff, and know that you're not going to win all the time. We are constantly learning like, "That didn't work, that didn't work." But it's like you're looking for the things that do work because it really helps, and if you're the one looking for that and you find it for anybody else, it's really good.Stephanie:Yeah, it seems like it'd be hard to vet if a channel... You think about like Clubhouse, TikTok probably has more metrics now. But how do you think about evaluating if that channel is working? Especially, when you're coming from a background in TV and branded content, and I'm sure all the brands were like, "We need metrics," and you had to really tie to different KPIs. How do you think about that now when it comes to, especially, exploring new things?Lindsay:Yeah, for us, it's we try not to let early channels get dictated by that. Because, and that's exactly what you just, if you're tied to making sure that you immediately see the ROI and having the KPIs, you're not going to be able to find those new channels because it's going to be really obscured at first. But it's understanding, for Clubhouse, it's like this is a way that I like to talk to people. It's a very authentic way. Even though there's no way for us to really track anything, I know that it's really important. Because it's important, we're going to be there. Eventually, we'll find a way to track it. Eventually, we'll be able to see that. That's also why it's put in a different bucket.Lindsay:For us, it's not put in with the same Facebook, Instagram, where it's like, "No, we know what that's going to look like." These things, it's we know they're going to be weird and we're going to let them be weird and just explore and have fun. I think that's really important too is like have fun. Not going into it and being like, "This needs to work." Going into it and being like, "How can we make connections? How can we get the word out? How can we learn and teach?" I think that's been really good for us.Stephanie:Yeah, are you finding areas to do product placements in shows? So I'm thinking your packaging is so beautiful and different and I'm just imagining it being in different TV shows or movies, or just places where you're like, "Whoa, what is that?" Especially, with your background, I'm sure you always see opportunities of like, "We should be there."Lindsay:Yeah, well, it's funny too because a lot of my friends, and we were still in LA, so I'm in a team producing in this world, so it's like, or I was. All my friends are on all those shows, so I'm like, "Well, here's some bite for your shoot. Here's this for..." Trying to get just because that's they need it. I know because I was that, and so it's constantly we at least had it behind the scenes, which is super good and important. Because it's the same people on all the different things. But when it comes to, yeah, getting it on camera, we want to, and there's a few companies that actually do that. But we have not explored that yet, but I love the idea. I love the idea of it. I feel like we haven't really, which is pretty ironic considering my background, we haven't touched TV. We've done everything outside of it, but not yet TV.Stephanie:Oh, wow, I'm excited to see you eventually get in there. I was thinking earlier you were mentioning how you had to find manufacturers quickly. How did you find the perfect partner who also had the focus on sustainability and using the ingredients that you wanted? Because I could see, especially, for, to me, the toothpaste industry, I feel like has just started coming around where people are like, "Oh, maybe you shouldn't have fluoride in there. Maybe you shouldn't have all these other chemicals and ingredients and whatnot." Then if you add on the sustainability piece, it feels like a lot to bring to a manufacturer who's maybe like, "I just do Colgate stuff. That's what I do." How did you go about exploring that and finding people who would fit within your company mission?Lindsay:Especially, at the beginning, everyone said no. It was impossible. It was literally me begging people and getting ghosted all the time. Just being like, "Please, I have like..." At that point, we had a lot of money coming in from orders that we couldn't fulfill. I was like, "I have all of this money, can you please just make my product?" No one wanted to do it, exactly. I was just like, "This is I don't know what I'm going to do." Because not only, as a client, especially when we were small, we were a huge pain. We were asking for, and exactly what you said, they had to be using these very specific ingredients that I had bought from Whole Foods and they [inaudible]. We couldn't go to toothpaste manufacturers, we were going to vitamin supplement anchors. Because we're like, "Who the heck makes tablets?"Lindsay:They had never worked with so many agents, they've never worked with really like any of this stuff. Then when I tried to go palm oil free, oh my god, it was like the end of the world. It was like such, and then we were like, "Oh, by the way, not only do we have this incredibly complicated tablet that we want you to make, and it has to taste good, and it has to break apart perfectly, and it has to also be able to withstand being shipped across the country." So it's like this whole thing, "It also needs to be in glass."Stephanie:Yeah, I was going to say the final piece of glass.Lindsay:Oh my god, and that's not something that they do. This is when you go to these manufacturers, it's like a huge, basically, it's a tumbler. They throw all of the plastic bottles into it and it shoots it out onto the line. That's basically how, I mean, you throw like thousands of plastic bottles. Into this big, it's called the scrambler, into a huge barrel basically. The barrel shoots out the plastic and then the pills get put into the plastic on the line and then it gets whatever. Not only did we have a glass, so it needs to be put on, like hand put on. But then we had these aluminum lids that kept denting because, typically, it's like these plastic lids.Lindsay:When they put them on and the machine, basically, goes through these two pieces of foam, that screws the lid on. When it's plastic, it's fine, nothing happens. But when it's aluminum, it scratches and crushes. Now we have to have people hand tightening our breaking thing. We were like, "And by the way, it needs to cost this." We were like it was so hard. Everyone said no. We finally found one that said yes. Then it's now it's like, "And we like working with small businesses." But then we're like overwhelming them with orders because if we just keep on getting orders. It was hard. It's like people are like, "Oh, they're good problems to have." You're like, "Hey, yeah, but they're actual problems still. We still think it's a real problem."Lindsay:I think that, and even our fulfillment company is it was incredibly hard to find a fulfillment company that will commit to not using plastic tape, so hard. When we finally found one who would even... They didn't even commit, they were just like, "We'll try to use paper tape." We're like, "Okay, that's fine." We were with them until we were big enough, and then [inaudible] companies wanted us. So then it was like, "Oh, hey, we know your plastic free. We bought a paper tape dispenser just for you guys." We were like, "Oh, we'll come to you." That's really cool because now it's there's other brands that are smaller than us that can work with that fulfillment center, and they don't have to have the same battle that we did. It was definitely hard, and the bigger you get, the easier it is.Stephanie:How big? What's that tipping point when manufacturers started reaching out to you all?Lindsay:That's a good question. The thing is, is that we're in a good spot now where it's like, but then what happens is that you then start, you still, then start outgrowing where you are. Because we were working with small, now we're at medium, and it's like, "How does that feel?" I think what we're doing this time, and we're learning as we go, instead of going to a bigger manufacturer, we're actually in the process of setting up other manufacturers around the US. Right now, we're literally made right up the street in LA. But we're going to also have one on the East Coast and then possibly one in the Midwest, and that would be the way that we would do it instead as opposed to going through a bigger. We like working with small businesses. We like supporting that, and so I think that's how we're going to go.Stephanie:Yeah, which I think is probably more helpful when it comes to logistics and shipping and being able to route orders and [crosstalk]-Lindsay:Exactly.Stephanie:... orders from your East Coast facility and, yeah.Lindsay:Right, and we don't offer a rush shipping either because that's the highest carbon footprint essentially. So being able to have a... we have our warehouse here in LA, now we have a warehouse in Chicago, so we can still get orders to our customers much faster without having the rush thing, just fricking sweet.Stephanie:Yeah, that's great. What issues do you encounter with people who come to your ecommerce website and they're trying to learn about it? What things did you have to solve on there that maybe you weren't expecting? Whether it's around like education or how to use this, or what is this and what things are you working on around the customer journey?Lindsay:Yeah, it's a huge education puzzle because it's something that we brush our teeth twice a day, every day, since we're like four years old, three years old. Asking a customer or asking someone to break that whole concept and use a tablet is a really big deal. Especially, we're all on autopilot when we brush our teeth. It's like who's thinking about that. I think that for us, it's trying to explain, it's not only explaining the problem, like the billing toothpaste tubes and the plastic problem, in general, which thank goodness is getting way more attention now than it was previously, which I think is just so important. It's like not only do we have that education thing, but then we have the actual using of the tablets.Lindsay:So you need to pop it in your mouth, you need to bite down, you want to use a wet toothbrush. Then if people aren't getting the foam that they want, it's explaining like bite down a little bit more. This whole thing, very, very hands-on. Then the final piece of the puzzle is the fact that we're subscription, and the fact that we don't use rush shipping. In the world of Amazon where everyone's expecting their thing to end up the next day, ours takes like a week to get there. But it's we're carbon neutral, we offset the carbon. We purposely choose slower routes because it has the least footprint. It's like there's an education piece every step of the way. But, luckily, we have really curious customers who that's important to them.Lindsay:Instead of being penalized for our stuff getting there slow, typically, they're like, "Oh my gosh," as soon as they realize why, they're like, "We get it and thanks for doing that." I think it's definitely a totally different way and way more work the way that we're doing things. But, in the end, it's the most important thing.Stephanie:Yep, and it sounds like you made a conscious decision to not be on Amazon. What was the thought behind that? Was it the sustainability aspect of it, or you just wanted to keep your customers in a place that you can fully educate and bring them on board, or how did you think about that?Lindsay:Yeah, it's funny because I get this question a lot, and I guess, just for all of the reasons why you would assume for an eco-friendly brand not to be on Amazon, is true. At the beginning, I had to make that choice and I did, and then I just haven't changed it. It's not something that we would like... I'm not saying we would never ever do, I don't see us doing it. But if there was one of the criticisms we get a lot is accessibility because we are only available on our own site. We're not in retail and we're not on Amazon. I've done that for a lot of reasons, control is one of them. I know when it comes out of my site, it's not packaged in plastic, it's not I know exactly where it is. If there's a problem with the order, we can look it up.Lindsay:It's this whole it's I like that hands-on approach, but it's not... You do compromise on accessibility, and so that is something that one of the things that we get is you guys are really trying to do the most good, then why wouldn't you make it accessible to everybody by being on Amazon or being in Target? For me it's like, "Well, I'm not ready to think about that yet. Maybe you're right, I'm not even thinking if that's right or wrong yet, but I'm not ready to even look under that thing." But so as of now, no.Stephanie:Cool. Makes sense. Let's talk about product development because I know you have a new whitening gel product coming out, and I want to hear what that process looked like when you were so focused on your toothpaste bits. Is that how... Yeah.Lindsay:Yes.Stephanie:Then shifting over to starting to create new things and listening to maybe customers and what the market wants. How do you think about developing new products and the logistics behind it and all of that?Lindsay:Yeah, new products are so fun. We listen to our customers, I think, obsessively. I'm constantly going through our DMs, I'm constantly going through Instagram. We have places on the site where we're asking for their feedback. It's so important to me to have that really tight relationship with them, and so that's how we knew. We have our 2K servers that we came out with mouthwash and we came up with mouthwash as a direct response to what they've been asking for. We have our toothpaste, it's really minty, but it's not like pow in your face like commercial minty. We do that specifically because there's a lot of people who we want it to be natural mints. You can really only get it so minty, honestly.Lindsay:But also we want it to be just a lighter mint, but what people are asking for is a really pow in your face solution. We were like, "Okay, let's do mouthwash." That's what our mouthwash tablets were or are, and you basically just pop one into in your mouth, you bite down and they're made with nano-hydroxyapatite, just like our toothpaste tablets, so it's good. Not only does that help to strengthen your enamel, but it also helps, basically, it coats your teeth and it makes them look whiter and brighter. Like not only that, it makes your teeth look nice and shiny. It's like minty, it is like in your face.Stephanie:It turns into a mouthwash from a tablet?Lindsay:Yeah, and that was something that was super fun to make. It has similar ingredients, but then we've also used like... We basically put other things in there that just immediately dissolve in water. When you put it in there and you take a sip of water, it just dissolves super fast and gets all over your mouth. Basically, it turns into mouthwash. That was super fun and that was our customers asked for something like that, and so that's what we made. Then we have our bamboo toothbrush, which has castor bean bristles, which is actually really rare. Most bamboo toothbrushes are made with nylon or polyester bristles. So we did castor bean because it will compost down to plant food essentially.Lindsay:Then same with our floss, it's made of PLA, polylactic acid, which gets a bad rep sometimes because it's one of those industrial compostable things, but it's so thin that it's not like the same as when you get like a cup of this made of PLA. But the reason we get that is the only other option is silk and we're a vegan company, and were like, "We're not going to do that." Also soap, but soap floss broke too easily for me. I use all of our products, so I'm like, "If it's not working for me, it's not going to work for our customer." Then our most recent one is our whitening gel, and so that was something that, again, our customer had been asking about because it's whitening, especially, whether it's the lights or the the trays. Those syringes, like the plastic syringes, not like [inaudible], those syringes and the whitening strips are not recyclable.Lindsay:It's like those are going in a landfill and our customer and like me too, you're doing what's best for the planet, but you also you want to be able to whiten your teeth and you want to be able to wear makeup and do these things. We were like, Okay, how are we going to make this solution?" It was actually way harder than you would think because whitening gel, it expands and contracts because of the peroxide in it. When you put it in glass, it's way less friendly than plastic, which will expand with the gel. It was actually quite a hard nut to crack, but it was really fun and we're the first and only ones to ever do it. We launched it last week and it's just sales have been amazing.Lindsay:That was one of the things too that we're constantly trying to figure out, "How much do we order? How is this going to do?" We're like, "We don't have any data and no one's done this before. How are you supposed to know?" There's a lot of gut thinking that goes into what we do as well.Stephanie:I was just going to ask about how you plan for the order management and how much to even make, and how do you think about that when you haven't created a product like that before?Lindsay:I stress our ops guy out all the time.Stephanie:You're like, "You got it."Lindsay:Yeah, I'm like, "We don't know." We, literally, get on the phone and we're like, "Okay, what do we think it's going to be?" Then try to figure out like what's our lead time and how fast? It's always coming up with plan A and then plan B, and then what's the ripped cord plan? What's the perish shoot of like, "We've sold through this in three days. What do we do?" Type situation. Yeah, we're always coming up with those kinds of things.Stephanie:That's cool. Yeah, I'm excited to try the whitening gel. I want to try this mouthwash. Now, I'm like, "I'm just going to spend the whole day just working on my teeth, trying all the things."Lindsay:You and me both.Stephanie:Where do you want to be in a couple of years? What are your goals? What are you guys focused on right now?Lindsay:That's a good question. I really like where we are now in terms of I want to be doing what we're doing, but just bigger. I think that we've seen some really positive things since we've started this journey. I love basically being the thorn in the side of these big companies. I think one of the things that has happened really recently that people think is scary or bad, but I think is actually incredibly exciting is we've seen the big guys, like big pace, like get into our space. They're starting to come out with their own toothpaste tablets. They're starting to launch these things specifically going after our customer. For me, that's the most exciting thing ever because we, as a small brand, can do a lot but we can't do it all.Lindsay:The plastic problem and the reason we're in this to begin with is because the big guys have made unsustainable choices and have been caught in this race to the bottom, and they've been doing these things. For them to see us basically improving out the market, being like, "Hey guys, this works, hey guys, this works." Then them feeling pressured to have to then be like, "Oh, we're losing part of our market share to this little company. This is super annoying. Okay, fine, we'll release a two-face tablet." Even if they're not doing it for genuine reasons, they're doing it, and that's keeping plastic out of landfills. It's showing that people care about these things and it's going to ultimately help the movement.Lindsay:If we're the ones that are there, it's like, "Cool, you guys released toothpaste tablets." We already have like other products that we're releasing that's going to do the same thing in other spaces. It's like, for me, it's I love that position. If we can just still be there on the fringe and still pushing these big guys and showing out that there's a market, that's exactly where I want to be. I just I hope we're doing this but more.Stephanie:Oh, that's cool. I definitely could see these companies coming and trying to acquire you. Then a lot of those brands, I think, need to garner more trust. Like you said, whether it's genuine reasons that they're doing it or not, if they were to take a company like yours and triumph pulled into their own, it'd be great if they could take your best practices and level them all the way up to the top of the company. Might be hard doing that. I'm trying to even think about like what that integration process would look like, and trying to maintain the clarity behind the message and the brand and the mission and everything. But I feel like they're going to come and just try and scoop you up.Lindsay:I don't know. Well, and the whole point is to get... If we can show that customers want this and then the big guys start doing it, that's when like accessibility no longer because as long as they do it right. If they don't do it right, I will be tweeting about the store [inaudible]. Yeah, as long as like they're... and it doesn't, and that's the thing too is for sustainability it's like, "Yes, I would love that we all want to save the planet and we all want to do this." But also if your company's behaving in a legitimately sustainable way, just because you see that there's a market opportunity, that's the same to me. Because the at the baseline, it's still helping the cause. I think that's where we're really trying to push. I really want that.Stephanie:That's cool. Amazing perspective. I love that. All right, well, let's hop over to the lightning round. The lightning round is brought to you by Salesforce Commerce Cloud, our basic sponsors. This is where I ask you a question and you have a minute or less to answer. Are you ready, Lindsay?Lindsay:I'm ready.Stephanie:Okay. What's the nicest thing anyone's ever done for you?Lindsay:Oh my gosh, that's a really hard question.Stephanie:You can take time to think about it though.Lindsay:Yeah, I got a minute. I got one minute.Stephanie:While I drink my water.Lindsay:I guess the nicest thing anyone's ever done for me. With that, is that I'm thinking of so many different things. I'm not like, "Oh, I can't think of one thing." I'm like, "I'm thankful for so many different things." I guess the first thing, though, and I think it's because we were just telling the story. This is going to sound so cheesy. I really think the amount of for [inaudible], like first customers gave us at the very beginning when I was sending these emails being like, "I'm so sorry that I have your money and I can't deliver your product for two months." They were like, "It's cool." Like that literally would bring me to tears.Lindsay:I would get those emails and I would be crying on my bed, and Asher would be like, "What's going on?" I'm like, "This customer said it's okay." Because that was a really stressful time. I'm sure there's like way more meaningful things, but that's the first one that came to mind.Stephanie:I love that, yeah, not cheesy at all and that's awesome. What one thing do you not understand today that you wish you did?Lindsay:One thing that I don't understand today that I wish I did? I guess like investing or something. The first thing that he said, I was like Bitcoin.Stephanie:We've had people say that.Lindsay:[inaudible] let's bring them down. Just putting too much time on Clubhouse, okay.Stephanie:Yeah. Hey, there's Bitcoin clubs, you can just hop in.Lindsay:Yeah, I know, but I don't think that would help me understand it.Stephanie:You can get up on stage, just ask all your questions and you'll be good.Lindsay:Yeah, I think that was like maybe if I did one understand that actually I should probably think of more meaningful things. But, yeah, I'll say that. I'll say that for now.Stephanie:Okay, cool. Another question, I feed my creativity by doing?Lindsay:Going on a run.Stephanie:Going on a run?Lindsay:Yeah, random, but that I know off of that [inaudible].Stephanie:If you had a podcast, what would it be about and who would your first guest be?Lindsay:Oh, I love that. I would love to do like sustainable journey type one where it's a... but it would need to be done in a non-boring way, which is why I haven't done this yet. But I would love to have, honestly, I would just love any excuse to talk to Jane Goodall. I would literally start podcasts to just talk to Jane Goodall. Yeah, I would just basically orchestrate a way to have a podcast to talk to her.Stephanie:I love that. We are working on potentially putting together a sustainability podcast and looking for a sponsor right now. Anyone out there you can get in, and Lindsay is ready to hop in and talk to Jane. We already have everything set up.Lindsay:Yeah, any time. Any time.Stephanie:The last question, what one thing will have the biggest impact on ecommerce in the next year?Lindsay:What one thing will have the biggest impact on ecommerce in the next year? I'm thinking, this is important. I would have said the iOS thing, but we've already been through that and that didn't really do all that much. I would say the incredible amount of brands that are starting up and the competition in the way that that's going and brands'' abilities to adapt and what we were talking about, pioneering those new acquisition channels. I think that will be the biggest make or break moment for a lot of the brands that have popped up over the last two years. I hope that continues to go up and stuff.Stephanie:Yeah. That's a good answer. I do sit there and wonder like how is this going to play out with all these new D2C companies popping up so much competition? How do you stand out? It'll be interesting watching.Lindsay:Yeah, it reminds me of what happened with TV in a way where it was there used to only be those channels, like certain channels. Then, all of a sudden, the internet came and then it was really fragmented. Then there were so many and you're like, "Where are all the eyeballs? How do we get eyeballs?" It's like the same thing, but with brands. It's cool. It's a good thing for the customer, that's for sure.Stephanie:Yeah, I agree. Well, Lindsay, this interview has been so fun. You're a blast, of course. We'll have to have you back for round two, hopefully, in the future. Where can people find out more about you and Bite Toothpaste Bits?Lindsay:Yeah, on our website, so it's either bitetoothpastebits or bitetoothpastebits.com. They can come to us, and then on social media is just @bite, so B-I-T-E.Stephanie:Amazing. Can't wait to try everything out and thanks for joining us.Lindsay:Thanks.