POPULARITY
Are you ready to create a roadmap to navigate emotional landscapes with courage and grace? Attachment Unraveled “Coaches should coach from a place of experience you want someone who has the skills that you need to develop in order to achieve your goals…” – Chris On this week's episode you get to listen to Melissa and Chris… The post Attachment Unraveled: Healing Through Understanding with Chris Rackliffe |217 appeared first on Melissa Vogel.
On the 35th episode of Enterprise Software Innovators, hosts Evan Reiser (Abnormal Security) and Saam Motamedi (Greylock Partners) talk with Chris Helsel, SVP of Global Operations and CTO of The Goodyear Tire & Rubber Company. Goodyear is a leading vehicle equipment manufacturer known for producing tires and rubber products for diverse applications, including cars, airplanes, and industrial equipment worldwide. Chris shares his thoughts on the vital role of technology at Goodyear, important blueprints for successfully leveraging AI, and how Goodyear tire sensors are enabling the future of self-driving vehicles.Quick hits from Chris:On the symbiotic nature of AI and cybersecurity teams: “The AI basically tells them right away what to go do. So I almost think of it as Tony Stark. When you put on the Iron Man suit, it gives you a kind of superhuman augmentation.”On the need for AI to manage data overload: “It's impossible that we're going to think engineers are going to be able to consume that data...You're going to need these types of [AI] technologies in order to discern those insights.”On enabling data-driven technology: “Our solution has a sensor in the tire... It measures temperature, pressure, acceleration, ID. It has a small chip and a battery. So we take that information off there, combine it with some other vehicle information, and pass it through Telematics, up to the cloud."Recent Book Recommendation: The Effective Executive by Peter Drucker--Like what you hear? Leave us a review and subscribe to the show on Apple, Google, Spotify, Stitcher, or wherever you listen to podcasts.Enterprise Software Innovators is a show where top tech executives share how they innovate at scale. Each episode covers unique insights and stories that will help you succeed as a technology leader. Find more great lessons from tech leaders and enterprise software experts at https://www.enterprisesoftware.blog/ Enterprise Software Innovators is produced by Luke Reiser and Josh Meer.
Chris is joined by UN Goodwill Ambassador, Sabrina Elba, to discuss climate change, conflict, and climate injustice. Sabrina highlights the urgent, real-time impacts on rural communities and why empowering women is critical to getting us out of this dumpster fire.Show notes from Chris: On global climate migration, check out this extraordinary article by the amazing Gaia Vince on the realities of a century of upheaval and how we can build greater resilience in our communities. Global Citizen has so many fantastically inspiring resources it's hard to know where to start. But on empowering women and girls in rural areas, this is a truly uplifting article with suggestions on how to take action: 7 Women Changing the Future of Farming in Africa.See omnystudio.com/listener for privacy information.
Finding that secret sauce can lead to success, but it's not always easy to find. In this episode of the Class E Podcast, we talked with Chris Sexton, founder of the barbecue catering company, Sexton's Smoke-N-Grill. From learning countless lessons in the Greenville Starts program to dealing with personal health concerns, Sexton discusses the future of his company, how he has become more appreciative of his skills, and the importance of keeping priorities straight as an entrepreneur. Guest: Chris Sexton Facebook: https://www.facebook.com/sextonsmokingrill Host: Mary Sturgill Producer: Isabella Martinez '24 TRANSCRIPT: MARY: Hi there, everyone. Welcome to this episode of the Class E Podcast. You know, this is the podcast that is brought to you through a partnership between the Hill Institute for Innovation and Entrepreneurship and the Communication Studies Department here at Furman University. Today's episode is part of the everyday entrepreneur series in which we talk to entrepreneurs who have graduated from our GVL Starts program. And the reason that we're doing that is we want you to hear their stories and be inspired by them wherever they are in the process of their venture. So today we have a very special guest, Chris Sexton, who is the owner of Sexton Smoke-N-Grill, and a new venture that he's calling Mr. Sauce It Up. Chris, welcome to the show. CHRIS: Thank you for having me. Thank you for having me. MARY: Chris, I'm so happy that you were able to join us today because one - I'm gonna look right into the camera for the YouTube people - Chris' food is amazing. Now when I was in, you know, I was a broadcaster for 20 years, and when I was in Texas, the broadcasters and you know different people in the community, they call us celebrities or whatever, but we had to judge barbecue competitions. So I've judged many a barbecue competition in my life. And Chris' is by far the best of any that I have done and it all boils down to the sauce, which I imagine is where the Mr. Sauce It Up came from. CHRIS: That is exactly where Mr. Sauce came from. I've created a new sauce using fruit, alcohol, and just a wide imagination to come up with different sauces. We've got about 10 to 15 sauces that we do. MARY: Yeah. CHRIS: All incorporating fruits and alcohol like I said. Like you can take Hennessy bourbon… MARY: Don't give your whole secret away. CHRIS: No, everything's not coming, but we've got great stuff coming. MARY: We don't want people to copy it. And you will want to once you taste this, you'll want to try to redo this at home. Tell us about how you got started with this. Because you're in finance. CHRIS: I'm in finance. So to be honest with you, from working in finance, I've always had a passion for cooking. I started cooking when I was like 14 years old working at a little restaurant in Greer with legendary Peggy Davis. She owns Peggy's Diner in Greer. Started working with her, handing out trays… and I kind of fell in love with that whole environment of cooking, creating. Did that all the way through high school… worked at McDonald's. But the sauce and the cooking came from truly talking on the phone with a guy from Mississippi on the phone about a car deal. MARY: Oh, wow. CHRIS: And he asked me what I was doing for Thanksgiving. I told him I was going to try fried turkey. He said you need to smoke it. MARY: Yeah. CHRIS: And that day, I smoked a duck, a turkey and a…a duck, a turkey, and a Boston butt. MARY: Wow. CHRIS: And they all came out great. MARY: Yeah. On your first time. CHRIS: On my first time, it came out great. Not perfect, but great. MARY: Right. CHRIS: But it was addictive. It was like it was something that…it's what I needed at that point in time to slow me down and give me some perspective. MARY: Yeah. CHRIS: And from there it's just kind of bloomed and grown from there. MARY: Yeah. What inspired you? Was it just the conversation with him or have you always… I mean, you've kind of always been a little a foodie. CHRIS: A foodie. MARY: I mean, I consider you a foodie. CHRIS: So what really inspired me is the process. MARY: Yeah. CHRIS: I fell in love with it. And I'm a person that loves serving people. So getting to feed people, seeing smiles on their face, people honestly patting your back saying this is the best barbecue I've ever had. MARY: And there are some smiles when they eat your stuff. CHRIS: And it's encouraging. So the sauce idea actually came… I made a dish, not gonna say what dish it is, and my mom tried it and when she got done, she says “man, this would be good on some chicken wings.” MARY: Yeah. CHRIS: And so me being who I am, it took me like three years… I sat there and thought about it and one day while I was at work, all my great ideas come on the clock… So I was sitting there one day and I'm like bingo. I figured out how to do it, I tried it, and I kind of took it off from there. MARY: Yeah. CHRIS: And that's… the biggest thing about my barbecue is it's different. MARY: Yeah. It totally is. CHRIS: And I refuse to do what everybody else does. And my goal with my business is to create a new space in a traditional market. MARY: Yeah. CHRIS: When you go to restaurants and you go places… that's the other thing that inspired me…I'm tired of eating vinegar based, tomato based, mustard based barbecue sauces. You know, I want something different and so that's what we've done. MARY: So you have…how many sauces did you say now? CHRIS: Got around 10 or 15 sauces. MARY: Yeah. CHRIS: The newest…the newest sauce that I'm working on would be a Carolina white sauce. Carolina is known for that fruit flavor for peaches and things of that nature. MARY: Right. CHRIS: So imagine taking your traditional yum yum sauce mixed in with a little bit of fruit. MARY: Oh yeah. CHRIS: And we're working on that and actually combining the smoked brisket and pulled pork with fried rice with that yum yum sauce. MARY: Oh my gosh. My mouth is watering. CHRIS: So, yeah. Look for us on Tik Tok soon. MARY: Yeah, there you go. When we were in the… we were in Greenville Starts cohort together, and the first time I tasted Chris's sauce, I was like, “Chris, you need to call this the best damn sauce ever.” CHRIS: That is actually the slogan. “The best damn sauce you've ever had.” MARY: Yeah. Yeah. I love it. CHRIS: I tell people… I'm trying to be humble, but when you have something that's different, you have to let people know. MARY: Exactly. CHRIS: And this is when you taste it, it just… it kind of shocks you because you're not… you're thinking barbecue sauce. MARY: Totally. CHRIS: But it kind of just catches you… you're like what is this? MARY: Yeah. CHRIS: And it just kind of sucks you in. MARY: Well, and I think you just said it correct. You're taking a space that is so kind of entrenched in kind of the flavors that are there. And you're creating something new with the idea of barbecue. And I love that. Can you talk us through the process of creating this business because I guess you started with the smoking first and then the sauces and then where are you… how, you know…do you have a website? Do you have a restaurant? How are you coming together? CHRIS: What we're doing now is… So this is how I initially started out. I was at my desk at Ford one day having a conversation with someone that asked me about catering. MARY:Yeah. CHRIS: So I hopped online, in between calls, looking at what I had to do to get started so I went online, I got my EIN…and kind of got in touch with state and got everything going. MARY: Yeah. CHRIS: That was in 2016. So for the last three years off and on, I've done a lot of catering. A lot of on site. My biggest thing is on site grilling. MARY: Yeah. CHRIS: I put on quite a show when I grill. MARY: I mean you can tell with his personality. You're the entertainment and the food. CHRIS: So yeah, if you're looking for an entertainer and a grill master, I'm your guy. So we… that's my big thing is I travel, I take my grill, I like to set up shop. MARY: Yeah. CHRIS: And I also work with… I've been working… I had been working before I took my current job with the church during the Wednesday night Bible studies. I'm big on… like I said my dad is a Baptist preacher. MARY: Right. CHRIS: So we grew up in the country and all I know is fellowship and eating. I've probably eaten in every county in the state. MARY: Yeah. CHRIS: Every, every type of food you can have, but those experiences is what inspired me. But long story short, the business idea and the model came from just three years of having to stop and go because working back and forth, and now learning how to balance time, family, and everything. The Mr. Sauce It Up will give me the opportunity to kind of work and service people and enjoy it and also make my first big shine through Mr. Sauce It Up. MARY: Yeah. So I want to talk a little bit about… because entrepreneurial, you know, ventures are, it's a journey, right? And I know we all have setbacks, and I know that you've had some setbacks, including a health setback for a while that kind of made everything go on pause. So how are you doing now? And let's talk about the setbacks and how you overcame them. CHRIS: Oh, wow. So it's crazy the night that we had our finale. Our, you know, our big pitch. MARY: Yeah. CHRIS: I found out I had a nodule on my thyroid that they had to go in and remove. They thought it was small, but it ended up being like the size of a baseball. MARY: Wow. CHRIS: So it sat on my chest and it kind of impacted me. Dealing with things like that… it impacts…your thyroid is your gas and keeps you going. MARY: Yeah, yeah. CHRIS: So for like the last three years, I've ran on nothing but adrenaline and you didn't know it. So it's taken me a little… little bit of time to adjust to being normal and not having that excess energy and just you know being actually knowing what it feels like to be tired and having to take a nap. MARY: Right. CHRIS: So for the last six, you know, part of that I ran on you know pretty much adrenaline because the thyroid and I were back balanced. Kind of and it… but it gave me an opportunity to really sit back and refocus and re- kind of gave me a bigger hunger for what I want to do. I've looked at food trucks, and things like that, but a crazy and a funny fact about me is I've had 22 wrecks in my lifetime. MARY: 22 wrecks? CHRIS: 22 automobile accidents. MARY: Oh my goodness, Chris. CHRIS: So me driving a food truck probably nobody around here wants. MARY: They don't mix. CHRIS: That's not a good mix so I'm in the process of trying to find a building either…. I would prefer Greenville, but the Spartanburg area is also something I'm open to… to certainly barbecue out of. But until then, I'm gonna let myself and also cakes and sweet potato pies… MARY: Yeah. Oh my god. Sweet potato pies. CHRIS: …kind of feed my business and my picture while I kind of work my nine to five and do your day in and day out thing. MARY: Yeah. CHRIS: The struggle. You know, being an entrepreneur… it takes a… you got to have a little bit of crazy in you to be an entrepreneur. But the biggest thing you have to have to be an entrepreneur is being resilient. MARY: Yes. CHRIS: You never know what obstacles are gonna come your way. I never expected and never thought I was sick MARY: Right. You had no idea. CHRIS: I had no idea. You know, and even through it, you got to, you know, one of the mottos I live off of is fake it till you make it. MARY: Right. CHRIS: You got to go into every day, no matter what's going on, with a smile on your face, press through. And you kind of put it behind you and live in that moment because you never know life can be taken from you at any given moment. So you got to enjoy it no matter what's going on. And that's what's kind of helped me evolve and get to the point that I'm at now. And for me, I've learned you know, when things are going… when things are going at their best is when things…your biggest hurdles are going to come. MARY: Yeah. CHRIS: For me, I spent all last year partnering with people and creating a lot of partnerships I kind of had to give up. So to kind of reinvent myself and roll back out and rebrand as Mr. Sauce It Up, it's going to be really exciting and I think it's the right way and path to go. The biggest thing I can tell other entrepreneurs is don't be stubborn. MARY: Yeah. CHRIS: For a whole course, through Greenville Starts, everybody told me, “it's the sauce, it's the sauce, it's the sauce.” MARY: Yeah. CHRIS: And I love cooking. I love grilling. MARY: Yeah. CHRIS: And a couple of weeks ago… I'd say a couple of months ago, it finally dawned on me “Hey, you've got a product that nobody else can do.” MARY: Right. CHRIS: This is your…this is your headline and this is your angle. I'll still grill and barbecue and do barbecue and whatnot. But…I have a gift that I gotta give the world. MARY: Right. That's your foot in the door - think the barbecue, but the sauce is so scalable. I mean it gives me goosebumps just thinking about where you could go and seeing this on grocery store shelves. I mean it really does. CHRIS: That's my ultimate goal. My ultimate goal is to… MARY: I mean I literally just got goosebumps. CHRIS: We've got here in Greenville…we've got we've got the Duke's manufacturing. I want to have something similar to that here just pumping out sauce so hopefully when you're getting you know your Chick fil A… go to McDonald's get a sauce packet, and you'll see my pretty face on it. MARY: I love it. I love it. And you said some really good things about there in that comment about being resilient and not being stubborn. And I think being willing to go with the flow because I know you were in talks about a space right when you got sick. And so every… I mean literally everything went on hold. CHRIS: So with the space…this is another thing that when in the restaurant business, it's a risky business… MARY: It is. CHRIS: For me, the biggest thing is finding people that want to invest and that will roll the dice on a restaurant. MARY: And that's true for all restaurant owners. CHRIS: That's been the biggest challenge, but the buildings I looked at have been highly competitive. MARY: Yeah. CHRIS: I looked at a property in Duncan… was looking at property in Duncan and somebody came in at the last minute and outbid me by like 30 grand. MARY: Right. Wow. CHRIS: And being in finance and being the underwriter you… the risk… I'm very careful if that's the risk I take and I evaluate it making sure I'm making solid decisions. MARY: And you understand that risk. CHRIS: Yeah, because being in business for yourself, is a risk alone. MARY: Absolutely. CHRIS: You don't want your business upside down and trying to make back money that you may not be able to get back. That's not a wise move so we kind of backed off a bit. And it's been a blessing because like I said had I got into it then, gotten sick, we would have been in a worse situation. So thankfully, we got into a position where we're able to press pause and my true belief is that when my opportunity and my time is there, it's gonna happen but until then we're just gonna keep doing what we have to do. MARY: One hundred percent. One hundred percent. So what's been the most rewarding thing about starting this venture for you? CHRIS: Networking and meeting new people. MARY: Yeah. CHRIS: And to be honest with you, the other thing people don't know about me is I'm kind of shy. MARY: I don't believe that for a minute. Because the first night we were in Greenville Starts together, I mean, we clicked, obviously but…but yeah, no. But you, probably like me, I have to overcome it when I'm with people. Once I get there, I'm fine. CHRIS: So I guess you can say my shyness comes out different. When I get nervous and get shy, it's like lights on, like camera on, game on, let's go. So you never really know it. So I embrace it. And being able to… this has taught me how to fight through that and how it really… I guess having a good time meeting new people and the biggest thing I think I'd say is just learn. Being an entrepreneur has taught me so much and it has stretched my limits. And so when I was younger, I was a hothead. MARY: I believe that. CHRIS: Something happened… something happened and I'm, you know, fired up. MARY: Right. CHRIS: So for instance, a couple of weeks ago, my first time back out and I go to leave and my grill catches a flat tire. MARY: Oh, no. Yeah. CHRIS: And the old me would have been saying Sunday School words and throwing stuff and all upset. We just pressed pause and regrouped and it has made me grow and develop patience. And understand that some things you cannot control. If you can't control it, you just move on. MARY: I would think that this entrepreneurial process that you're on, and that health scare, that major health scare, probably both had something to do with that kind of, okay, it does no good to get upset about this stuff, just deal with it one thing at a time. CHRIS: Well there's another factor in there also. I've got a grandson now. MARY: Oh yes, that's true. Happy Grandfather. CHRIS: So, being a grand dad, it kind of…I would say the moment I took my daughter to the hospital. MARY: Yeah. CHRIS: Got the call. I had to take her to the hospital. That's when life changed. MARY: Yeah. CHRIS: We just kind of… I don't know it's something about having a grandchild that you can give back to them. MARY: Right. CHRIS: It kind of changes you. At the same time, it just shows your new appreciation for life. So all of that within the three month period, it really has slowed me down… made me appreciate life even more. But at the same time, it's made me a fighter. It's really made me a fighter and made me... MARY: Yeah, because you want to be around for him. CHRIS: Yeah, to be honest with you, this whole get up, I've thought about for the last four years. MARY: Yeah, this is what it's gonna look like. CHRIS: Yeah. And going through that experience gave me the courage to kind of step out of the shell and put it out there and move forward because what's the worst thing that can happen? Somebody will laugh at you? MARY: Right. Exactly. CHRIS: You know at the end of the day, this is who I am. MARY: And who cares? If they're laughing at you, they're looking at you? CHRIS: They're looking at you. They're going to remember. MARY: Right. CHRIS: This is who I am. A little country guy from South Carolina just trying to sell some good barbecue and sauce. MARY: Yeah, I love it. Chris, I love it. So we were, like I said we were in the Greenville cohort, Greenville starts cohort together, and for those of you may not know that's like an eight week program where the participants could expose everything from, you know, fundraising, capital to legal issues and things that of course, you're not an expert in everything, right? And so we learned so much to marketing. I mean, you name it, we touched on it in that class. What were some of the takeaways from that that you are implementing now? Almost a year later. CHRIS: Want to hear a good story? MARY: Yeah always. CHRIS: It kind of goes with the question you asked me previously about my experience. MARY: Yeah. CHRIS: Do you remember the night that we wrote the breakup letter? MARY: Yes. We had to write a breakup letter to our business. And you know, you're the second person to bring this up in these conversations, but his breakup letter was amazing. But go ahead. CHRIS: I lived my breakup letter this year. And that night, the night that we had read that letter out loud and share that experience… MARY: Yeah. CHRIS: I lived it this year. And going through it and living it and seeing your dreams kind of, let's just say be taken away. MARY: Yeah, yeah. CHRIS: It makes you appreciate your gifts and it makes you appreciate what you did. So, without Greenville Starts, I probably wouldn't have pushed through this year. I probably would have gave up and just gone back to working the nine to five and just you know enjoy life but my experience with Greenville Starts and having to, you know, go through a made breakup with something that you love and then having to go through it actually, it kind of gave you…I can go back and I can remember some of the speeches that the speakers gave. I will say it gave me motivation and courage and more than anything else it taught me that I'm not a know it all. I've worked in the banking industry for years as a banker and on the other side of the fence, telling people no to loans and being actually on the opposite end of it - trying to be approved, trying to get all your documents together gives you a whole new appreciation for what people on the other side go through. We've been on both sides. I have an appreciation for both now. But I will say that Greenville Starts… it gave me the courage to bounce back and gave me that fight and it prepared me for the hurdles that were ahead. So if anybody in Greenville County has a business idea and they feel like they can make it, but their confidence is an issue, I would definitely recommend Greenville Starts. We have the all-American, the GOAT, the great, the best hair, Brian Davis. He just…has a way of inspiring…inspiring you. Like just…any of our cohorts, I think about you guys and where you're at and I see your successes and it motivates you. You see other people being successful and that pushes you on. MARY: One hundred percent. Which is the whole reason we do this podcast is to share your all's stories with the public so that we can encourage other people to go ahead and follow their dreams and create their ventures, you know, and I mean, you talk about Greenville Starts being an inspiration, you're an inspiration to, I know our entire cohort. CHRIS: I appreciate it. I appreciate it. I think, you know, God puts you in a certain place at a certain time. And I think I feel like that was a perfect time because like going into it, I'll be honest with you toward the end of class I kind of felt like something was off. It drained me. It drained me. It put me… I don't like talking about this aspect of it, but it impacted my mental health. MARY: Yeah. CHRIS: It gave me some anxiety and put me in a depressive state and it you know, that's not me. MARY: Right. CHRIS: One hundred miles per hour, 100 days a week. MARY: Yeah. CHRIS: So at the end of the class, it was like okay, what we got going on? And you guys really pushed us through. It's like a family. It's not just like a class. It's not just like a group of people. It feels like family and a cheerleader group. MARY: Yeah. CHRIS: I've coached football, played football. I love sports and I love that team aspect. And that's what it felt like. Each week it wasn't a competition against each other. It was a way that we can push each other…push each other to make each other better. It's been a year and a half now. And when you can go back and recall specific conversations and specifics in a needed time, that's when you know it had an impact on you. That's what Greenville Starts said to me. MARY: Yeah. CHRIS: It put a lot of information in this encyclopedia up here. MARY: Yeah. I love that. I love that. What advice do you have to other entrepreneurs that you… either from Greenville Starts or just your personal experience? CHRIS: I'm going to steal one from Ted Lasso. MARY: Okay. CHRIS: The great Ted Lasso. You got to believe. And what he also says…that's number one is believe.You got to believe in yourself. You got to believe in the process and you got to trust, you know, that the good Lord put you in a position he gave you whatever gifts that you have for a reason. And you have to follow the plan in your process. When things get hard, you got to go harder. MARY: Yeah. CHRIS: And when things get easy, you got to kind of scratch your head and say, why is that so easy and know that something's coming. MARY: Right. Be prepared. CHRIS: Be prepared because something's around the corner. The other thing is, I'm a Florida State fan. And the reason I'm a Florida State fan is because of…He talked about a lot about what you do when people aren't watching. MARY: Yes. CHRIS: And as an entrepreneur… it's what you're doing behind the scenes and when people aren't watching is what's going to make you successful. You know, the… you know, I cook a brisket 26 hours for it to be gone in 30 minutes. MARY: Right. CHRIS: So it's what I do behind the scenes and the effort and what people don't see is what makes you a great entrepreneur and a great… and great at what you do. And the last is something I learned from a guy named Tom Leopard back in 2012. Your priorities. As an entrepreneur, you have to have your priorities in order. It's got to be your faith, your family, and your fortune. If those three get out of whack at any point in time, it's time to step back, reevaluate, and bring them back in line and then things will start flowing so greatly. So always remember your faith, your family, and then you're fortune and as long as those three are aligned, you can always be successful and bounce back. MARY: I love that. The three F's. CHRIS: The three F's. MARY: I love it. So you brought some… before we let you go, you brought some goodies for us. So, boy, I wish people…I wish we had smellivision because that cake smells so good. Oh my gosh. So Chris, what do we have here? This is one of the cakes that you do. CHRIS: This is my spin on a…You lived in Kentucky? MARY: I did not live in Kentucky. CHRIS: I don't know why I thought you lived in Kentucky. So, this is my take on a Kentucky butter cake. MARY: Okay. CHRIS: So I call it a Carolina butter cake. MARY: Yeah. CHRIS: It's a pound cake with some secret flavors. MARY: Okay. CHRIS: As all things as Mr. Sauce It Up does, we also do cake glazes. MARY: Yeah. CHRIS: So this has a pineapple. No, I'm sorry…a peach mango rum glaze to it. MARY: Yeah. Oh my goodness. This is going to be so good. CHRIS: Mixed in butter. Something I came up with. I am the king of taking a recipe and turning it into my own. MARY: Right. CHRIS: So, that's what I do the best. I don't… You know, if I go out to eat I'm probably going to take two… two combos, two meals and turn it into one. MARY: And put them together. CHRIS: So this is kind of what I've done with this and created my own flavor, but I feel pretty confident, I'm willing to bet you a $1 to your paycheck that you've never had a flavor like this. MARY: All right, let's see it. CHRIS: Let's see. Let me pull out my Dexter knife. MARY: He's going to pull out his Dexter knife. Oh yeah, that's a Dexter knife. All right. All right. All right, let's cut into this sucker. So remind me again what the glaze is? CHRIS: This is a peach mango with a hint of rum. MARY: Okay. CHRIS: And some other stuff that I can't really share with you at the time. I'll share with you at the time. MARY: Right let's go. Cheers. CHRIS: Cheers. MARY: Oh my gosh. CHRIS: Mmm. Mama where you at? Come on over here, get smacked. MARY: That is so good. Did you say mama come on over here, get smacked? CHRIS: Come on over. Come on over. MARY: Oh yeah. So, we're going to have to change that phrase, well or add to it…the best damn sauce…the best damn glaze…because this is good stuff. CHRIS: Thank you so much. Thank you so much. MARY: Oh my goodness. Alright. So again, we'll have the links to how you get in touch with Chris wherever we're posting this podcast, both on YouTube and all of our podcast channels. Just look under the copy, the body copy. And you'll see that there because you… if you are having an event, you want to hire Chris to cater that event. Again, it's the entertainment and food. You can't beat that. CHRIS: Let me tell you. MARY: Yeah. CHRIS: I didn't mean to interrupt, but this cake is good. MARY: It does taste good. CHRIS: It tastes good. I'm a pound cake foodie and I think I've found something here. MARY: I think you have too. CHRIS: Not to brag, but yeah. MARY: I think…I can't put it down. I got to finish eating so I can say the rest of the show so I can close the show out. Oh my gosh. So good. Alright. How do people get in touch with you if they want to get some sauce or they want you to cater an event? CHRIS: Cater an event. You can find me on Facebook - Chris Sexton or Sexton's Smoke-N- Grill. Also on Instagram, it's Chris Sexton or Sexton's Smoke-N-Grill. Email me at sextonssmokengrill@gmail.com. www.sextonssmokengrill.com. And that's just Sexton's, Smoke, the letter “n”, grill.com. Or you can call me 864-680-4629. We got the sauces. MARY: Alright, Chris, thank you so much. CHRIS: Thank you. Anytime. Anytime. MARY: So remember, if someone you know is an entrepreneur or has an idea, Greenville Starts is a great place for them to get started or if they're somewhere in the process along the way and they just need that little extra “umph” to learn things that they don't necessarily know, then that's a great place. So, in order to get into the next cohort, all you have to do is Google Greenville Starts and Furman and it should be the very first link that pops up and get yourself on that list. The other thing I wanted to remind everybody of is that we have the Paladin Pitch competition, which if you are a Furman student, you can win $10,000 for your venture. That's coming up in April, but you have to participate in some pitch competitions before that. So, contact the Hill Institute, get your pitch to them and start working and then from all those pitches throughout the year, they'll choose the finalists to pitch in April. So be thinking about that, be brainstorming. If you want to do something, now is the time to do it. So, that does it for this episode of the Class E Podcast. I'm your host Mary Sturgilll. Remember this podcast is brought to you through a partnership between the Hill Institute for Innovation and Entrepreneurship and the Communication Studies Department here at Furman University. It is produced by student producers, Kayla Patterson and Eliza Polich, a true example of the Furman Advantage. And remember, you can get this podcast two ways now - you can listen to it wherever you listen to your podcast, we also have a YouTube channel where you can watch it and you can see this beautiful cake that we just ate and see us eating it. And we also.. follow us on Tik Tok if you're on Tik Tok because we just started a brand new Tik Tok channel and you'll see a lot of the outtakes and a lot of cool stuff on behind the scenes stuff on that Tik Tok channel. Until next time everybody, dream big.
On this episode of The End of Tourism Podcast, my guest is Macià Blázquez-Salom, a professor at the University of the Balearic Islands, who specializes in the Geography of Tourism, Territorial Planning, Sustainability and Degrowth. He utilizes his teaching and research activity in the environmental movement (and vice versa), and through his activism in the Grupo Balear de Ornitología y Defensa de la Naturaleza (GOB) and Alba Sud.Show NotesMacia's Journey in the BalearicsThe Beginning of Mass Tourism through Currency DevaluationContradictions in MallorcaCocoon Tourism in SpainYou Want to Work in the Balearics, You Have to Sleep in a TentBoosterism and Green BoosterismDegrowth Definitions and ContradictionsImagining Other Modes of TravelImagining Other Modes of ResistanceHomeworkGoogle Scholar: Macia BlasquezOrcid: Connecting Researchers with ResearchersMacia Blasquez's UIB SiteTranscript[00:00:00] Chris: Welcome Macia, to the podcast. From what I've been able to dig up around your life and work that you've been studying, tourism and its contradictions for a very long time. Now, I'd like to ask you what drove you towards a career as a professor and critic of the tourism industry?[00:00:24] Macia: Well, in fact, even before finishing my degree, I was involved in social movements here in the Balearics, in Mallorca, particularly. I was member of the committee of the volunteers collaborating with the GOB, which is the biggest ecologist group. Then by the eighties and perhaps influenced by this collaboration, I decided to study geography and to analyze the relation in between tourism and natural conservation, because by then we had promotion after the tourism boom in the sixties and seventies.The eighties Spain became member of the European Union and some of our politicians, they decided and they were promoting the Balearics as second residents destination for north European people, and this means that investment in the real estate market even increased with foreign people buying second residencies and promoting as well the promotion of more urban development for this purpose.And that was written in the natural areas due to what we call "green" or "gray-grabbing" with new facilitation of land here in the Balearics. And this was the main aim I had to develop my research on this topic, with special planning and natural conservation in the Balearics.Afterwards we had what we called the real estate bubble that began in the nineties and burst in 2008. And that was a period when I was more involved, particularly in the social movements. In fact I feel more related with activism than with academia. After the crisis with my age, I took the decision of giving support to younger people in the social movements and devote more time to the academia with colleagues Ivan Murray or Ernest Canada or Robert Fletcher or Nora Muller, other people who are working in this research group in the University of the Balearics Islands. But I still working with the NGOs Alba Sud, particularly the GOB, and other social movements in this region in the Western Mediterranean region particularly. [00:03:03] Chris: I have some questions regarding these social movements that I think maybe we'll get to in just a bit.But, I'd like to try to offer a bit of context for our listeners in part because before I heard of your name and before I interviewed our mutual friend Ivan, for the first episode of the podcast, I don't think I had ever heard of Palma or Mallorca before, even as someone who had traveled through Europe and many other parts of the Mediterranean.And so I'm curious if you could give us a bit of background on how Palma came to be over touristed, or at the very least, what you've seen come to pass in your time there. I mean, I know it's, it is also historically has a lot of deep importance for the Spanish state and Mediterranean history culture.[00:03:55] Macia: I'm sure you have heard about the dictatorship of Franco in the forties, fifties. Mm-hmm. Fifties. He was given support to the Luther in the second World War. And after the defeat, the technical support he had was coming from Opus Dei, was introducing tourism and real estate business as a way to have foreign direct investment.And as a result, Spain had a very important development of, of real estate business in this new areas particularly related with sun and sea tourist resorts. Perhaps you have heard about Costa Del Sol, Benidorm in Costa Blanca, or Costa Brava in Catalonia. And the same for the Balearic Islands. During that period, in the case of of M we had a huge amount of new hotels being double developed.And they were financed partly by people coming from North Europe, particularly from Germany. There was a novel accumulation of capital in that, in those regions that have had industrial development and investors realized that tourism could be a good business, introducing this way of consuming savings, consuming income for working class people in the UK, in Germany, and this is how in the Balearics we had the development of what we call the tourist boom in the sixties with hundreds of hotel being built up every month really in Mallorca, in Ibiza. Perhaps you have heard about Ibiza, right? [00:05:52] Chris: And this is just to be clear, this is in the first decade of international mass tourism post-war, correct?[00:06:01] Macia: In the Sixties, because the two first decades after the war, our regime, the dictatorship of Franco was defeated. I mean, they were given support to Hitler and Mussolini and Spain was set aside. And the model they were following was self-sufficiency. We became members of the UN United Nations by the end of the Fifties when Franco decided to take this option of promoting foreign investment, making the change of currency with the foreign currencies possible.And it was through devaluation of the peseta, this means that investing from the UK, Germany, or even the United States, or for tourists coming to Spain, visiting our country, was so cheap due to this devaluation of the currency. And this way we had that mass tourism development and mass foreign investment, foreign investment and flows of people coming here for holidays and enterprises developing their activities for profit.This was the beginning and the result were that after all those years, we now have eight hundred thousand tourist beds in the B alearics and we had 16.5 million tourists last year in the Balearics, 2022. And this is a huge amount of tourists for an archipelago that just has. 5,000 square kilometers, 1.1 million inhabitants.Most of our tourists are coming from the UK. Let's say 25%. Germany, another 25%. This means 8 million tourists coming from Germany. Then we have 13% coming from mainland to Spain. And then we have people from Scandinavia, Norway, Sweden Denmark, the Netherlands. They come here looking for sun warm weather conditions during the summertime, particularly during the high season.This is July, August, September. This is when we are having more over crowded beaches, traffic jams in the roads and the touristification of every single place in our islands. Because by the beginning, tourists were going particularly to the tourist resorts. But nowadays the countryside, natural areas, villages and, and even the historical center of the cities is being touristified.You can find boutiques, you can find terraces of bars and restaurants, all of them changing very quickly, the landscape and the way of life of our places. [00:09:17] Chris: At what point in your life did you arrive in the Balearics, in Mallorca, or are you from there?[00:09:23] Macia: I'm from the Balearics. The mother of my father Fr was from Palma. And the parents of my mother were from M and I was grown here. It's quite common in places like Balearics to have roots, to have grown people is not moving that much. Right. I attended my degree and I finished my PhD thesis, and now I have my job here and this is common. We're not moving that much. [00:09:54] Chris: Well, it's a bit of a blessing to hear that there are people in the world still who live in the same place they were born, which is more and more rare. I guess I'm curious, you know, over the course of your life then, in Palma, is there one thing that you might be able to single out as perhaps the most startling or biggest or devastating change that you've seen there?[00:10:19] Macia: Yeah. Well in fact it has to do with my political position during that moment because we had a right wing go government from 2003 to 2007 with Lots of cases of corruption related with mega pr This means projects with a budget higher to 1000 million euros. They were projects to promote highways, to promote big infrastructure, transport infrastructure, a new harbors, enlarging the airport equipment.Instead of refurbishing the hospital, they decided to build a new hospital. And this is nice, but at the same time, they were meeting and we have collected information about those meetings to arrange, Communicating in between big entrepreneurs and politicians. Where and how was that development going to be?And they were changing this information to give advantage to the investors in a way which is nowadays considered as corruption. Many of those politicians are even nowadays in jail because of those cases. And during that period I was involved as a representative, as a volunteer giving support to the campaigns for the right to the island, demanding the politicians and the public institutions and the entrepreneurs not to follow with that promotion which was jeopardizing our land promoting socio-spatial segregation destroying natural habitats. That was the peak of the real estate bubble. Just before 2008 when I was involved. We were preparing something which is called a popular initiative to the parliament.I was myself defending the initiative in the regional parliament which was in fact making a proposal not to allow more enlargement of the transport infrastructure, enlargement of the urban for instance, protection of natural areas. And that moment was particularly stressing, even violent with lots of discussions and pressures with people lobbying.But now I feel I did something nice. We have some successes, therefore it was worth doing that. [00:12:58] Chris: Beautiful. And I'm, I'm curious as well, I guess on a general scale on the island, how has civil society begun to respond? And I mean, we're talking about 60, 70 years now, so, you know, of, of tourism development there.How has civil society, how has the government, the NGOs responded to this over tourism, and what, if any, contradictions do you see in those responses? You've already spoken a little bit about the corruption. [00:13:33] Macia: Yeah, you're right. This is a very good question because I was a young guy perhaps having looked to the situation from an naive point of view.And now that I see it after some time, I understand some contradictions. Perhaps the biggest contradictions that I see now is that, Fighting to promote natural artist protections, for instance, or fighting for a better environment. They took profit of our campaigns to find new ways to earn money, to take profit from the situation. This is to say that nowadays we see how what was the biggest threat, the gray grabbing, is now becoming another model to exploit the land and the people, which is what we call "green grabbing."Capital and entrepreneurs and investors are taking profit of the land that was protected, setting aside urban development to promote a new image of the Balearics as a good refuge for capital investment and for the elites, and this is not that nice. After the time you realized that you were instrumentalized to promote the business of those that are nowadays refurbishing the hotels, a lot of investment is being devoted to the built environment.Because the real estate business is even more profitable nowadays. And as it is becoming scarred because we have stopped the urban growth these houses and these buildings, whatever they will be, perhaps hotels, are becoming more and more expensive and people is being fired. The people is not any long being able to live in the villages because they are becoming too expensive or in the Catholic shelter of the city and people is not being able to follow living in the Balearics and they have to go to live mainland.And this is a contradiction of the natural environment and the quality of life. It's becoming more exclusive. [00:15:59] Chris: Yeah, this was something that our mutual colleague, Ivan, had mentioned to me at some point. He was referring to the way that after the lockdowns, during the pandemic, once the government travel restrictions were dropped, that there was this pattern emerging or seeming to emerge around the stratification of tourism towards elite either travel or investment.So we could call maybe the elitification of tourism and tourism investment. And I imagine that's kind of what you're speaking to now. Is that correct? [00:16:41] Macia: Yeah. they were talking about cocoon tourism. People looking for a secure place to spend their holidays.At the same time, it has to be accessible. At the same time, it has to be sustainable. Now they are talking about circular economy, and the Balearics are leading this labeling, this branding, you know? Mm-hmm. It, it's like we, we are the best in the world to innovate in these terms.We were defending the natural areas. Afterwards, there was a limit of the number of tourists beds. We have eco-tax cuts for the accommodation, which is then invested in mitigating the problems that tourism is provoking. Now we have this circular economy system applied to the hotels that are having public support to invest in energy efficiency.And the result is that we have an elitization, we have elites grabbing built environment, grabbing land. And this promotes socio-spatial segregation in the islands. I imagine that it's the same that has happened in Bahamas or in Hawaii. It's like refugee for capitals and elites looking for security, looking for profitability, away from migration from the south because not that much migration is arriving to the Balearics.The mainland spain is closer to Africa or the Canary Islands. They are much more closer to Senegal, for instance, but not that much amount of boats coming from Africa with migrants looking for better living conditions are coming to the We have many, many marinas with huge yachts, very expensive.And this is another icon, you know, another example of the gentrification of the islands is a tourist gentrification. Second residences, good airport connections. The airport is growing and growing, that they are promoting more enlargement of the airport capacity, highways, rent al car and the local population is being set aside even more if you are not local, if you want to come to the Balearics to work during the high season, perhaps you have to sleep in a balcony or in a tent or in a car.Because it's so difficult to find dwelling, to find, to find accommodation if you are working. Wow. Yeah. Prices are increasing so quickly. Hmm. [00:19:38] Chris: On that note and in the context of these eco taxes and the island becoming a destination for this certain type of elitism I'm also curious about this term that Ivan introduced me to, that precedes a question that he actually wrote in for me to ask you. And the term that he mentioned, which I had never heard of before, is green boosterism or boosterism in general. Perhaps first you might be able to explain what Boosterism is for our listeners.And then secondly Ivan was mentioning this in the context of Spain receiving public funds from the EU in order to redevelop the tourism sector. And so the second question, then what do you think the trajectory of tourism is in Spain with this extra money?[00:20:36] Macia: The original government that allowed different ways to have new incomes coming from the tourist activity. One of them was tourist which is paid by those tourists using legal accommodation in hotels or in short term rental.And they have another way to have this. Income in the regional government, which is if you want to open a new hotel or to create a new short term rental in your house, there you have to pay to have the license. 3,500 Euros per bed is now what it is. With this money, regional government has income, which is not controlled by the central government.Perhaps you have to imagine that Spain is a federal nation, and it has a state, and our state, which is the Balearics is having control over this amount of money which is being collected through this status. In addition to this, as you said, European Union is giving support to the recovery of the Spanish economy with a budget, which is known as next generation.Is the way in which the European Union is promoting boosterism to recover the activity, the intensity I mentioned you before. In 2019, we had 16 and a half million tourists coming to the Balearics, and the result of this boostering after the COVID pandemics was successful as far as we had again, 16 million and a half tourists come to the Balearics in 2022.Therefore, they succeeded in boosting, recovering tourism as the most important activity in the Balearics. Half of our economy is based on tourism, 54% of our GDP. And this is as Ivan told you, something that our authorities are promoting. This is a way in which our politicians have decided to govern, to steer our economy, our society, going back to over tourism, going back to promoting the real estate business related with tourism as many tourists as possible.Promotion in the places where tourists are coming from, particularly Germany, the uk, Scandinavia, or nowadays in the States because we have a new direct fl from Palma to New York since half a year ago. Therefore, boosterism is in this way understood promoting growth. And green boosterism is, related with dressing it with sustainability, with circularity, with security, accessibility and natural areas protection.Greening that is increasing prices for people in Europe. Perhaps Magaluf is well known because it's a tourism destination for spring breakers, as you will say in the states. And nowadays, investment in hotels, refurbishing hotels is multiplying the price of the accommodation per 10. If you paid 40 euros before per night, now you have to pay 400.And this is a mass tourism destination that was popular among hooligans coming from England and nowadays is being gentrified. Through this process of elitifcation. [00:24:36] Chris: It's something that I wonder about from time to time, the increasing costs of travel and tourism being ways of certainly propping up the tourist economy or tourist economies, and then the real costs of tourism and how much of a discrepancy or a difference there is between those two things, right?Because so many of these tourist bureaus and governments and hotels and businesses are claiming that they are now, or at least moving towards charging people this kind of true cost, but certainly the true cost of these things goes well beyond our ability to pay for them in money, in cash, right?There are certain things someone, I think it was Deborah McLaren, someone who's been dealing with these issues for as long as you some, some 20 or 30 years. She said on that episode that there are things that you can sell that you can never buy back.So I'm always wondering about, it's like, okay, well we have these eco taxes and you know, surely, a lot of them just go into the pockets of the rich or the government. But even if they are being spent in good ways is that really a way of being able to measure the consequences and the cost of tourism?And so I wanted to take this opportunity to move a little bit towards the social movements that you've also been a part of there on the island. And to start with this notion of de-growth that seems to usually be set up in opposition to sustainability.Sustainability at the end of the day is really only trying to sustain the industry. You can say that, oh yeah, we're sustaining people and the planet, but insofar as the industry succeeds and then so de-growth a term that in my part of the world. And I think among most tourists is, is kind of a stranger.I think most people have still yet to really understand the depths of this term outside of perhaps over touristed places. But essentially, this manner of considering sustainability as keeping things where they are now, not reducing, not really changing anything, just giving the industry a more long-term success route.I know there's a lot of definitions and opinions on this, so I'll turn it over to you momentarily. But this willingness to shrink the tourist economy, whether it be just a little bit or whether it be to an incredible degree. But there's a lot of different opinions on this.And so de-growth becomes, in the last few years, in the last 10 years, something that really becomes a necessary possibility in the context of over tourism. I consistently come across reports and definitions that kind of vary in extreme degrees from what you've written as being neo Malthusian ideas, all the way to kind of post capitalist goals.And so I'm curious, why do you think there is all of this confusion in regards to the definitions of de-growth, and how much of it do you think is, again, just another form of greenwashing a way of saying, okay, so actually we're gonna change things dramatically on a systemic level, but we're only gonna do so insofar as it serves the industry.[00:28:16] Macia: Well, as you say it's so easy and it's so common greening the industry, the tourism industry, and giving support to those who have the power. And to those who get the benefits in economic terms. You can easily apply many different concepts, sustainability, circularity, or even degrowth.I will say degrowth in terms of having less people traveling, but with higher income. And you can say, okay, this is degrowth. This is fake because it's not considering the roots of the problem. It is perhaps solving environmental problems. This is greening, but i t is increasing inequality.Therefore, how can we make a definition of degrowth in a more appropriate way. There is another author in Barcelona, which is Giorgos Kallis. He's from Greece. He has been working in Barcelona for a long time. He has made a very good definition of degrowth. And he's establishing three particular characteristics of degrowing or degrowth political project.First of all, looking for decreasing the amount of energy and materials per capital. They call it "throughput." Is the amount of materials and energy that you use for your everyday life, or in this case for your tourist activity. This means that if you are traveling with a private jet or you are spending 10 times more water gardening, this is the kind of tourist behavior that has to degrow.This means contraction of the amount of energy and materials, but towards convergence because you cannot ask those not spending big amounts of energy and materials to contract. Those who are more guilty are the richest, you know, those who are spending more. This is the first characteristic.The second characteristic of this, degrowth political project, is that it has to promote redistribution and equity. You cannot consider a solution for tourist destination degrowing in the number of tourists if working class, middle class is being set aside, is being displaced, dispossessed.Therefore, this is the second characteristics. And the third one it is that the political project has to be planned and has to be democratic. People has to agree. Therefore, what is more important perhaps is awareness, the public debate, as you are doing with your podcast.Chris, congratulations. I like it a lot and changing opinions and talking about it and promoting thinking in the long term, not today, for tomorrow, but Jorge Riechmann in Spain is talking about precaution principle, because if you just think about your everyday life and don't consider future generations and people in the south and animals, plants, beings in the world.Therefore, the result is that we are behaving in an unsustainable way. And instead of degrowth, what we are going to have is recession without warning, directly to the collapse. [00:32:08] Chris: Yeah. Or end without end. de-growth, while it's something that you can look up and you can find in academic journals and articles and books, that it also shows up in the social movements. I think most famously among the Association of Neighborhoods for Tourism de-Growth in Barcelona. Barcelona, yeah. Right. And so we interviewed Daniel Pardo, one of the representatives of that group early on in the first season.And just so our listeners know, Spain is by far one of the most overt touristed countries in the world. And so we see, generally, in places like this, in overt Touristed places, a huge amount of backlash, protest, and as well alternatives against or in the face of the tourist industry.And so I'm curious Maia, about what kinds of social movements have risen up in Palma and what shape or form they take and what place you've played in them. [00:33:13] Macia: We like defining that movement in terms of right to the city or right to the land, or right to the island because it's, it is the movement of residents who are defending our rights. Going to the beach or just having access to housing is becoming so difficult. And in Palma there is a movement called Ciutat Por La Vida, the City for Those Who Are Living There. Like in Barcelona, they have trade union of people renting housing because they have organized an association to defend the rights.These are social struggles and we are also including the less favored people. I mean particularly people coming from Latin America or coming from Africa who are suffering the worst working conditions. And you can compare how those moving migrating, because they are looking for better living conditions are considering are considered by the system as those who have not right to do it.And at the same time, the system in this case capitalism is promoting tourists which consists of people who is also moving and perhaps they are even looking for a place to live as well because they are looking for the sun or looking for the culture or the hospitality of Latin community in Catalonia or in And this is not just environmental, it's not just being possible to be solved through greening. It has a social meaning. And it has to do with the system. It has to do with the salaries. It has to do with the model that is being applied to solve the problems. And the model the capitalist system is growth.The model in places such as Spain is more real estate development, more tourists coming. And we are seeing with phenomena such as the climate change or the rising prices of energy and the problems with migration, inequalities, growing inequality, the solution have to be perhaps out of the system looking for post capitalist solutions.And in this terms, degrowth and degrowing tourism.[00:35:52] Chris: Yeah. Sometimes I'll be talking to people here in Oaxaca or in other places regarding tourism and over tourism and what I think the end of tourism is or looks like, right? And certainly towards a certain degree of de-growth. And then I would, you know, also add for me personally abolition. Maybe I don't get that far. Maybe I do. And then someone often says " yeah, but what would we do without tourism," in a kind of angry, knee-jerk response? Right? And the question is always asked as if it's rhetorical, as if the question doesn't actually need to be posed, and if the answer doesn't actually need to be wondered about, right?What would we do without tourism? And I mean mm-hmm. You know, I have to ask the person why that isn't the real question, why you aren't asking yourself, really, what would you and your family and your community dream into the world without having this kind of dependency on this economy that is essentially, extremely precarious and exponentially damaging and destructive.So, in places like the Centro Historical of Oaxaca. And I'm sure in places like Paloma, 50%, over 50% of the economy is tourism. It is extremely difficult for people to imagine things otherwise. But you did mention there are groups in Mallorca that are actively engaging and fighting the tourist economy.GOB, I think one was you mentioned. Yeah. And Alba Sud, which is a little more on the academic side, I think. [00:37:44] Macia: We have designed research projects and they are looking for these bottom proposals from social movements, not that much u p-down from public institutions or entrepreneurs, and establishing as a goal different steps towards a better future. First of all, we decided to talk about a social transformation of the currently assisting tourism.This means that once you identify, for instance, low salaries in the tourism industry, or long day working conditions too much activity demanded to those, for instance, cleaning the rooms of the hotels. That is something that Ernest Canada has been analyzing in Spain in terms of "Kellys" the hotel maids. Therefore, social transformation on tourism, of tourism, of the currently assisting tourism means solving these problems.Or the same with energy consumption. The "throughput" we were mentioning before. It's like being pragmatic with the solutions is looking for short-term solutions to the problem. And then well, the same with biodiversity, for instance, or the same with climate change. But then the question is what about the future?What about he best of the scenarios you can imagine. Your utopia, right? Because I think we will agree with most of the people who is hearing your podcast that a better scenario for the future is having more leisure time. Mm. And leisure means we say cultivating yourself, reading, perhaps listening podcast or cooking for your friends, relatives, taking care of the children, the elderly people.This means some kind of wave that is improving the wellbeing of yourself and those around you. But at the same time, perhaps you are also willing to move and spend the night of out of your everyday life place. Therefore you visit relatives in another city or you spend days still walking for enjoying sports or perhaps sailing.I dunno. And this is tourism and this is improving your health, is improving your image of other places. Mm-hmm. When you were backpacker, you were traveling and that activity gave you a broader view of the world. Mm-hmm. You saw people, you met people in Mexico, for instance, and you decided to change your life and to take another position, political position, giving support to other ways of life. And the situation that the people in Oaxaca is having or had then before this. In this terms, tourism can give us opportunity to improve our life and the life of other people. We have to consider it, for instance, in the case of, imagine or teenager visiting places different to where they have grown and this is the way in which they develop alterity.Mm-hmm. They recognize what they are ,understanding what other people is. Mm-hmm. What are their living conditions and perhaps you see that they have a bathroom which is so different to the one you have at home, and therefore you appreciate the conditions you have at home. You have never thought how nice is the place where I am living the sanitary conditions?But if you visit, for instance, the case of Spain, wherever in Africa, you think, "okay, now I understand what is happening with those people who is even losing their life trying to cross the Mediterranean to come to the, to to Spain." I think that introducing this traveling is something that belongs to the culture in terms, for instance of pilgriming.People was visiting other places because it was a duty they had according to their religion. But it was also a way of becoming mature, realizing, being aware of what are the privilege you have and how valuable is your family? Once you see it from abroad, you think, okay, what you want to do is go back home because I feel unsafe.And this is a feeling that is helping you to improve, to become mature, to improve your understanding of the world. Therefore, we have to find the balance and perhaps not doing short breaks to spend a lot of energy in a weekend. But considering how much transformative is this kind of experience for teenagers, for instance. Therefore, perhaps as you said in your podcast, we are not anti-tourism.We want to find a way in which we can transform tourism in a social term and perhaps identify the way in which more leisure time can have as an small part of it, tourism as a way in which we become aware and we can help other people and we change things in the world. Mm-hmm. [00:43:53] Chris: And so on those lines, perhaps that would be some of the advice that you might have for our listeners or other people who might consider visiting Palma one day is go slow, pilgrimage. What would the end or transformation of tourism look like to you as an individual, as a resident of that place for people visiting?You know, it's, it's a little bit of a way of saying what kind of advice would you have for people who wanted to visit, but perhaps also taking into consideration what that world would look like.[00:44:33] Macia: Well, giving support to the social movements that are defending the right to the land, to the island, not interfering. And having in consideration social class struggles the environmental conflicts, dealing with pollution. Not coming to the Balearics for a short break, which means spending a lot of energy and polluting or short period of time not going into conflict with housing, using short term rentals, you have many, many important things to do. And perhaps a good way to do it is doing it from home beforehand. And promoting the networking in between people who has this awareness. This is why I think that, for instance, your podcast, another journalist activities is so important.Solving the problem of the language. I'm sorry for my English. Bridging the cultures and bridging the continents and the places that are so similar. I'm sure that in Mexico, in the Caribbean, in South America, in the United States, many places have problems which are so similar to those we are having in Spain or in the Balearics, in Mallorca or in Ibiza.Therefore networking is so nice. Mm. [00:46:11] Chris: Excellent. Thank you Maia. You were mentioning for a worthy traveler mm-hmm. Who might arrive on your shores is someone who is willing to engage and meet and know of the issues and the social movements and the activists and the activism in a particular place, and to be a guest as opposed to a tourist perhaps. And these social movements that exist in Spain, not necessarily against tourism, but in the context of tourism, most often, have a lot of time in. They usually have been around for years, if not decades, and the consequences of over tourism are now starting to reach other places much more quickly.I think Mexico is one of them. Mexico City, Oaxaca, certainly the obvious beach resorts. But in cities where people are starting to mobilize against] Airbnb gentrification pollution, as you said, among other issues. But these struggles and these movements are very young.Okay. And I'm wondering what kind of advice you might have for these grassroots movements that are just beginning. Coming from the point of view of grassroots movements that have been undertaken for years, if not decades now. [00:47:45] Macia: In my personal experience, what is more profitable perhaps is the link with the academia.Because nowadays it's so difficult to find independent, rigorous thinkers, let's say, people willing to contribute from an independent and rigorous point of view. I mean, in the case of Spain, we are lucky because most of the universities are public universities. And we still have most of the staff at university, we who are civil servants.In my case, we are working for the public administration and we are paid to think and teach and write to do this research. And this has been very profitable for the social movements in my opinion. This is my personal experience. You can also find other scientists in the society not related with the public institutions, not related with the academia.For instance, in the case of Alba Sud, we call it a post capitalist popular university because they, they don't depend on. Public funds, but they develop a very important, independent, rigorous research trying to establish these kind of foundations strong, very well based on writings of people that you have heard about them and you know, perfectly David Harvey from the City University of New York, for instance, or Jason Moore who works on Capitalism as well, or Silvia Federici, many other authors reading them and establishing the links.You have many, many good researchers, scientists in the States and in Canada and also in Mexico. Daniel nearly. For instance, in Mexico, you can use their writings and in this way develop the discourse with this strong foundations. This is what I will suggest. Perhaps it's, it's my own, you know, way the way in which I have done it.I suppose that you can find others, but if you maintain this independency and you work in a rigorous way, I always think that perhaps we won't win, but we will do what our conscience will mark, you know, as we have what we have to do. And this is a good enough for me. I dunno if we will stop the struggle with climate change and over tourism, migratory conflicts, people just dying while they are willing to cross towards the north. But we have to do all what we can, this is what can make us happy. [00:50:54] Chris: Mm-hmm. Mm-hmm. Thank you, Macia. It's been a pleasure.Yeah. And you know, I'd like to thank you on behalf of our listeners for joining us on the pod today, and being willing to speak in a language that is not your mother tongue for our Anglophone listeners. And before we depart today, I'd just like to ask for them on behalf of them once more.How might they find out more about you and your work? How might they read your writings and what you've put yourself to? [00:51:29] Macia: We have just finished a research project entitled Overtourism and Degrowth and you relate it with the University of the Balearic Islands?We have designed a webpage where we offer downloading papers, books. We have translated them to English, some of them, or we have published them. If not, if you cannot download them because some journals are asking you to pay, never do it because knowledge has to be free of charge, in my opinion, unless that knowledge that is being developed in the public institutions such as our university. Therefore write us message, you will find a way in which you can count at me or Ivan or Ernest, and we will send the documents in a digital way.And in this terms, I think that you can find whatever. And I am available for anyone who will want to know more about the topics we have been researching and welcome them. Welcome you as well to Mallorca whenever. Mm. [00:52:46] Chris: Beautiful. Thank you, Macia, once again. You're welcome for joining us today.[00:52:50] Macia: Thanks, salud. Get full access to ⌘ Chris Christou ⌘ at chrischristou.substack.com/subscribe
Chris: First off, you've been knee deep in CloudSec for several years now, watching trends, incidents and the industry evolve. Where do you think we've made the most headway, and where do you think we still have the largest gaps to close?Nikki: I'm really interested in multi-cloud environments and security - because of the connectivity potential between separate cloud providers. What do you think organizations should be most concerned with when looking at using multiple cloud providers? Chris: You recently contributed to a report with the Atlantic Council about the systemic risks of Cloud and Critical Infrastructure. Can you speak on that a bit? What are your thoughts about systemic risks are more and more of our critical infrastructure and national security systems now become reliant on cloud?Chris: While we know most cloud security incidents are due to customer misconfigurations, we've recently seen some major hyperscaler CSP's experience some very damaging incidents that impacted many. Do you think these incidents are causing some organizations and industries to second guess their plans for cloud adoption or lead to trust issues in Cloud?Nikki: One of my biggest concerns in cloud environments is Identity and Access Management (IAM) - especially in complex development environments. What are some of the major configuration challenges around IAM in cloud? Nikki: What is your favorite cloud security statistic?Nikki: I have to bring in the people angle - do you think that current tech teams have the skills and tools they need to manage cloud environments? Do you have any references or skills you recommend as teams build bigger cloud environments?Chris: On the people front, we know misconfigurations reign supreme for cloud security incidents. Do you think organizations are waking up the reality that they have to invest in their workforce when it comes to adopting technologies such as Cloud?Chris: We know you have your fwd:cloudsec event which has become an industry staple for learning and information sharing on cloud security. How did the event come about and what does the future look like for it?
Chris - I have to start with the intersection of law and cybersecurity. We're seeing major strides in regulations, both federal and state (like NYFDS), to regulate and enforce cybersecurity policies and program-based guidance. What are some of the emerging trends we're seeing in cyber law? Chris - As you know, we recently saw the new National Cyber Strategy, which makes a push for shifting the burden/responsibility for cybersecurity on the vendor or those best positioned to address it. Why do you think it has taken us so long to get to this point? I know you've drawn parallels to other industries such as automobilesChris - On the topic of parallels to other markets and industries, such as automobiles, pharmaceuticals and manufacturing, there are some unique aspects of software, in the sense it isn't tangible or kinetic, and can be very opaque, What impact do you think those characteristics have on trying to regulate it like we have done with other industries?Chris - The National Cyber Strategy also introduces the concept of Software Liability. This part of the strategy got the most aggressive response from industry and the community. Why do you think this makes everyone perk up so much?Chris - Many started to raise questions such as who will define "secure", who and how will it be validated or verified, and where is the line of responsibility between the software supplier and consumer. Any thoughts on these topics and questions?Chris - On the topic of regulation, many consider cybersecurity to be an example of a market failure. Can you explain what that is, and why some feel that way? How do you think think we balance regulation without stifling innovation in the tech industry?Nikki - How do you think the public sector and private sector are seeing cybersecurity laws differently? Do you feel like the private sector is lagging behind in cybersecurity regulations? Chris - I have worked on programs such as FedRAMP before, for Federal Cloud Services and I am familiar with NIST 800-171/CMMC as well for the DIB. Many argue, and I think there is merit to the claim that these sort of frameworks lead to smaller pools of suppliers and potentially a less diverse pool of market participants. Any thoughts on these impacts and if it is worth the trade off?Chris - Many compliance and regulatory schemes either take one of two approaches. The first being a self-attested model where entities self-attest their compliance, such as NIST 800-171 for the DIB was, and the second is a 3PAO model, where a 3rd party verifies compliance, such as in FedRAMP. Each of these models has drawbacks, such as less than truthful or accurate self-assessments, or the 3PAO requirement becoming cumbersome, costly and a bottleneck. What do you think about these two approaches and where do you see us heading with regards to say the National Cyber Strategy, liability and so on?
Engagement is the biggest sign of a healthy B2B Community, and a once you have it, it's easy to recruit new members, but driving the initial engagement is hard to do.That's why I'm so into the cohort class as a community onboard, but challenges may just be even better!Challenges provide a "quick win". In business terms, that's known as "speed to value", and it's an underrated driver of customer success.Chris Colt is an expert in challenges, and has me thinking they may be the perfect way to launch a community!He talked about:- Why building a challenge that will quickly engage your clients and make them stay- How he uses challenges himself to grow his community- What other problems challenges can solve for in your marketing, client acquisition, and customer success efforts- and much more!You'll be blown away by Chris's novel approach, and how successful it is! Don't miss your chance to pick his brain on how challenges can work for you!Come be a part of the show!https://tinyurl.com/B2BCBSeason5Connect with Chris:On his LinkedIn: https://www.linkedin.com/in/chriscolt-thechallengechampion/On his company: https://letsmakeanimpact.com/On his website: https://tcawithchris.com/, https://chriscolt360.com/Connect with ME!Online at:LinkedIn or Instagram.Learn to produce internet talk shows and build your own Relationship Flywheel. Find out more about the Bootcamp HERE.Support the show
Chris: So let's start with how we've gotten here. With digital systems accounting for 60% of global GDP, how do we still not have requirements or adoption of cyber expertise on public board?Nikki: You mention in your article about the SEC mandating cyber leadership into board rooms - do you think that the type of experience expected on boards should be geared specifically to risk management, or a mix of highly technical and governance experience?Chris: For those looking to fill some of those upcoming board opportunities, what recommendations do you have?Nikki: For your book the Great Reboot - you recommend that not only leadership but employees read it as well - do you think there's a gap in knowledge or maybe awareness of how risk impacts the business from a practitioner level? Would you encourage junior and senior personnel to read this book?Chris: On the flip side, for boards and publicly traded companies looking to bring cyber expertise into the fold, what competencies and skills should they be looking for? Where do they start?Nikki: Risk is bigger than one vulnerability or one misconfiguration but can have a number of definitions - how do you define risk management and do you think there's a need to define 'risk' more aptly in organizations?Chris: You often speak about systemic risk. Do you think the modern digitally driven economy and ecosystem is inherently insecure and vulnerable?
Nikki - You have a varied background between being a security engineer, consultant, manager, etc. What made you decide to focus more on the compliance aspects of cybersecurity?Chris - It is often said "Compliance doesn't equal Security". Why do you think this phrase has taken hold, do you think its accurate and how do we evolve beyond it? Nikki - Based on some of your posts about compliance - one specifically about implementing frameworks and guidance from NIST and the CMMC standards - do you think there's a need in the industry to focus more on implementation guides or do you feel like organizations are to complex to create guides? Chris - On the topic of compliance frameworks, we seem to be so reactionary, with new frameworks coming after incidents etc. and organizations struggle to keep up. Do you think we have a framework sprawl problem?Chris - On the topic of 800-171 and CMMC, there's a lot of talk on the topic of affordability and cost and the impact to the small businesses in the DIB, which has already seen massive consolidation. What are your thoughts on this, and how do we balance compliance/security with the need for a robust DIB of suppliers?Nikki - What do you think the future of compliance looks like? CMMC and otherwise - do you foresee more legislation around compliance coming down the pike?
Steph has a question for Chris: When you have no idea how you're going to implement a feature, how do you write your first test? Chris has thoughts about hybrid teams (remote/in-person) and masked inputs. This episode is brought to you by ScoutAPM (https://scoutapm.com/bikeshed). Give Scout a try for free today and Scout will donate $5 to the open source project of your choice when you deploy. Preemptive Pluralization is (Probably) Not Evil (https://www.swyx.io/preemptive-pluralization) iMask (https://imask.js.org/) Mitch Hedberg - Escalator Joke (https://www.youtube.com/watch?v=yHopAo_Ohy0) This episode is brought to you by Studio 3T (https://studio3t.com/free). Try Studio 3T's full suite of features for 30 days, no payment details needed. Become a Sponsor (https://thoughtbot.com/sponsorship) of The Bike Shed! Transcript: STEPH: I am recording in a new room because we're in Pennsylvania, and so I'm recording at this little vanity desk which is something. [laughs] But there's a mirror right in front of me, so I feel very vain because it's just like, [laughs] I'm just looking at myself while I'm recording with you. It's something. CHRIS: [laughs] That is something. STEPH: [laughs] So, you know. CHRIS: Fun times. STEPH: Pro podcast tip, you know, just stare at yourself while you chat, while you record. CHRIS: I mean, if that works for you, you know, plenty of people in the gym have the mirrors up, so podcasting is like exercising in a way, and I think it makes sense. STEPH: I appreciate the generosity. [laughs] CHRIS: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Chris Toomey. STEPH: And I'm Steph Viccari. CHRIS: And together, we're here to share a bit of what we've learned along the way. So, Steph, what's new in your world? STEPH: Hey, Chris. So I have a funny/emotional story that [laughs] I'm going to share with you first because I feel like it kind of encapsulates how life is going at the moment. So we've officially moved from South Carolina to North Carolina. I feel like I've been talking about that for several episodes now. But this is it: we have finally vacated all of our stuff out of South Carolina house and relocated to North Carolina. And once we got to North Carolina, we immediately had to then leave town for a couple of days. And normally, Utah, our dog, stays with an individual in South Carolina, someone that we found, trust, and love. And he has a great time, and I just know he's happy. But we didn't have that this time. So I had to find just a boarding facility that had really high reviews that I felt like I could trust him with. I didn't even have time to take him for a day to test it out. It was one of those like, I got to show up and just drop him off and hope this goes well, so I did. And everything looks wonderful. Like, the facility is very clean. I had a list of things to look for to make sure it was a good place. But it's the first time leaving him somewhere where he's going to spend significant time in a kennel that has indoor-outdoor access. And as I walked away from him, I started to cry. And I just thought, oh no, this is embarrassing. I'm that dog mom who's going to start crying in this boarding facility as she's leaving her dog for the first time. So I put on my shades, and I managed to make it through the checkout process. But then I went to my truck and just sat there and cried for 15 minutes and called my husband and was like, "I'm doing the right thing, right? Like, tell me this is okay because I'm having a moment." And I finally got through that moment. But then I even called you because you and I were scheduled to chat. And I was like, I am not in a place that I can chat right now. I think I told you when you answered the phone. I was like, "Everything is fine, but I sound like the world's ending, or I sound like a mess." [laughs] And yeah, so I had like two hours of where I just couldn't stop crying. I partially blame pregnancy hormones. I'm going to go with that as my escape rope for now. So I feel like that's been life lately. Life's been a little overwhelming, and that felt like the cherry on top. And that was the moment that I broke. Update: he's doing great. I've gotten pictures of Utah. He's having a wonderful time at camp, it seems. [laughs] It was just me, his mom, who is having trouble. CHRIS: Well, you know, reasonable to worry, and life's dialed up to 11 and all of that. But yeah, I will say even though you lead the conversation with everything's fine, your tone of voice did not imply that everything was fine. So when I eventually came to understand what we were talking about, I hope I was kind in the moment. But I was like, oh, okay, this is fine. We're fine. I'm so sorry you're feeling terrible right now. STEPH: [laughs] CHRIS: But okay, we're fine. For me, there was a palpable moment of like, okay, my stress is now back down a little bit. But I'm glad that things are going well and that Utah is having a fun vacation. STEPH: Yep, he seems to be doing fine. I've calmed down. You know, as you said, life's been dialed up lately. On a less emotional note and something that's a little bit more technical, I had a really great conversation with another thoughtboter where we were talking about testing. And the idea of when you learn testing, it's often very focused on like, you have this object, and it has a method. And so, you're going to write a unit test for this particular method. And it's very isolated, very specific as to the thing that you're looking to test. Versus in reality, when you pick up tickets, you don't have that scope, and like, it is so broad. You have to figure out what feature you're implementing, figure out how to test it. And it feels like this mismatch between how a lot of people learn to test and learn TDD versus then how we actually practice it in the wild. And so we had a phone conversation around when you are presented with a ticket like that, and you have no idea how you're going to implement a feature, how do you get started with testing, and when do you write your first test? Do you TDD? Do you BDD? Or do you PDD? That last one I made up, it stands for Panic-driven development. But it's what's your approach to how do you actually then get to the point where you can write a test? And I have a couple of thoughts. But I'm really curious, how does that flow work for you? What have you learned throughout the years to then help yourself write that first test? Or where do you start? CHRIS: Well, this is an interesting question. I like this one. I think it varies. And I think there's a lot of dogma around TDD as a practice. And I think it is super useful to break that apart and hear different individual stories of it. I know there are plenty of folks who are like, TDD is just not a thing and whatnot, and I'm certainly not in that camp. But I also don't TDD 100% of the time because sometimes I'm not super clear on what I'm doing, or I'm in more of an exploratory phase. That said, I think there's a...I want to answer the question somewhat indirectly, which is I know how to test most of the code that I work on now as a web developer in a Rails application because I've done most of the things a bunch of times. And the specifics may be different, but the like, to integrate with this external system, and I have to build an API client or whatever, I know how to do that. And there is a public API of some class that I will be exercising against and so I can write tests against that. Or I know that the user is going to click a button, and then something needs to happen. And so I can write that test, and it fails, and then it starts to push me towards the implementation. There are also times where it's actually quite hard to get the test to lead you in the right direction, and you have to know what hop to make, and so sometimes I just do that. But yeah, rolling back a little bit, I think there is a certain amount of experience that is necessary. And I think one of the critical things that I want to share with folks that are potentially newer to testing overall is that it is actually quite hard. You have to understand your system and how you're going to approach it, you know, one step removed, or it's like a game of chess where you're thinking a couple of moves ahead. You have to understand it in a deeper way. And so, if testing is difficult, that might just be totally reasonable at this point. And as you come to see the patterns within a Rails application or whatever type of application you're working on over and over, it becomes easier to test. But if testing is hard, that may not mean...like, how do I phrase this? There's like an impostor syndrome story in here of like, if you're struggling with testing, it may not be that something is fundamentally broken. You just may need a couple more chances to see that sort of thing play out. And so, for me, in most cases, I tend to know where to start or when not to. Like, I feel fine not testing when I don't test most of the time. I will eventually get things under test coverage such that I feel confident in that. And whenever I have one of those moments, I will stop and look at it and say, "Why didn't I know how to test this from the front, like, from the start?" But it's rare at this point for things to be truly exploratory. There's always some outer layer that I can wrap around. But like, I know X needs to happen when Y occurs. So how do I instrument the system in that way? But yeah, those are some thoughts. What are your thoughts? Does what I said sound reasonable here? STEPH: Yeah, I really like how you highlighted that pausing for reflection. That was something that I didn't initially think of, but I really liked that, to then go back to be like, okay, revisiting myself a couple of days or however earlier when I first started this. Now I can see where I've ended up. How could I have made that connection sooner as to where I was versus the tests I ended up with? Or perhaps recognizing that I couldn't have gotten there sooner, that I needed that journey to help me get there. So I really like the idea of pausing for reflection because then it helps cement any of those learnings that you have made during that time. Also, the other part where you mentioned the user clicks a button, and something happens, that's where I immediately went with this. I also liked that you highlighted that TDD has that bit of dogma, and I don't always TDD. I do what I can, and it helps me. But it has to be a tool versus something that I just do 100% of the time. But with more of that BDD approach or that very high-level user-level integration test of where if I need to pull data from an API and then show it to the user, okay, I know I can at least start with a high-level test of I want the user to then see some data on a page. And that will lead me down some path of errors. It might help me implement a route and a controller and then a show action, so it will at least help me get started. Or even if it doesn't give me helpful enough errors, it at least serves as my guideline of like, this is my North Star. This is where I'm headed. So then, if I need to revisit, okay, what's the thing that I'm focused on at the moment? I can go back and be like, okay, I'm focused on achieving this. What's the next smallest step I can take to get there? The other thing that I've learned over time is I've given myself the chance to be messy because I got so excited about the idea of unit testing and writing small, fast test that I would often try to start with small objects and then work my way backwards into like, okay, I have this one object that does this thing and one object that like...let's use a concrete example. So one object that knows how to communicate with API and one object that knows how to then parse and format the data I want and then something else that's then going to present that data to the user. But I found when I started with small objects, I would get a little lost, and I wasn't always great at bringing them together. So I've taken the opposite approach of where if I'm really not sure where I'm headed and I'm in that more exploratory phase or even just that first initial parse of a feature, I will just start messy. So if I am pulling data from an API and need to show it to a user on a screen, I'll just dump it in the controller if I need to. I'll put it all there together. And then once I actually have something that is parsing, or I have something appearing on the page, then I will start to say, "Okay, now that I can see what I need and I can see the pieces that I've written, how can I then start to extract this into smaller objects?” And now, I can start writing unit tests for that data. So that is something that has helped me is just start high, keep it high, be messy, and until you start to see some of the smaller objects that you can pull out. CHRIS: Yeah, I think there's something that you were just saying there that clicked for me of we didn't start with the why of TDD. And I don't think we've talked about why we believe in TDD in a while. So this feels like a thing we're saying. It's not good just because it's good, or we don't believe it's good just because that's what we say. For me, it is because it anchors us outside of the code sort of it starts to think of it from the user perspective or some outer layer. So even if you're unit testing some deeply nested class within your application, there's still an outer layer. There's still a user of that class. And so, thinking about the public API, I think is really useful. And then the further out you get, the better that is, and I believe strongly in thinking from the outside in on these sort of things. And then the other thing you said of allowing for refactoring. And if we have tests, then it's so much easier to sort of...I totally 100% agree with like; I start messy. I start very messy. I wanted to pretend that I was going to be like, oh, I'm so...Steph, I can't believe this. But no, of course, I start messy. Why would you start trying to do the hard thing first? No, get something that works. But then having the test coverage around that makes it so much easier to go through those sequential refactoring steps. Versus if you have to write the code correctly upfront and then add test coverage around that, it sort of inverts that whole thing. And so, although it may take a little bit longer to write the tests upfront, I do exactly what you're describing of like, I write the tests that tell some truth about the system and constrain the system to do that thing. And then I can have a messy implementation that I can iteratively refactor over and over, and I can extract things from. And then, I can tell a more concise testing story about those. And so it really is both the higher-level perspective I think is super useful and then the ability to refactor under that test coverage is also very useful. And it makes my job easier because I can start messy. I love starting messy. It's so much better. STEPH: Yeah, and I think former me had the idea that for me to do TDD properly meant that I had these small, encapsulated objects that I wrote unit tests for. And yes, that is the goal. I do want that, but that doesn't mean I have to start there. That is something that then I can work my way towards. That also falls in line with the adage from Sandi Metz that the wrong abstraction is more costly than no abstraction. And so I'd rather start with no abstractions and then start to consider, okay, how can I actually move this out into smaller objects and then test it from there? There's also something that I heard that I haven't done as often, but I really liked the idea; it feels very freeing, is that when you do get started and if you write your first test, if you write a test and it helps you make some progress but then you come back to it later and you're like, you know, the test doesn't really add value, or it's not helping me anymore, just thank it and delete it and move on. Just because you wrote it doesn't mean it needs to stay. So if it provided some benefit to you and helped you through that journey of adding the feature, then that's wonderful. But don't be timid about deleting it or changing it so that it does serve you because otherwise, it's just going to be this toxic test that gets merged into the main branch, and it's going to be untrustworthy. Or maybe it's fussy and hard to please, or it's just really not the supportive test that you're looking for. And so then you can turn it into more of a supportive test and make it fit your goals instead of just clinging to every test that we've written. CHRIS: I like the framing of tests as scaffolding to help you build up the structure. But then, at the end, some of the scaffolding gets ripped away and thrown out. And I do think, again, testing ends up in this weird place. The dogmatic thing that we were talking about earlier feels very true. And I've noticed, particularly on larger teams, folks being very hesitant to delete tests like, that feels like sacrilege. Of course, you can't delete tests; the tests are how we know it's true, which is true, but you can interrogate that. You can see like, how true is it? And every test has a cost and maintenance burden, runtime, et cetera. You probably know well, Steph, about having test suites that take a bunch of time to run and then maybe wanting to spend a little bit of time trying to reduce that overall time. And so there's always going to be a trade-off there. Actually, someone reminded me of an anecdote recently. I joined a project, and most of the test suite or all of the test suite was commented out because it was flaky or intermittent. And I was like, "Oh, I'm going to delete that." And people were like, "You're what?" I'm like; it's commented out. We're not using it. Let's tell the truth. Git will have it. We can go back and get it. But let's tell the truth with what we're like...this commented-out test suite is almost worse in my mind than having nothing there. The nothing feels painful, right? Let's experience that. Whereas the commented out stuff is like, well, we have a test suite; it's just commented out. It's like, no, you don't have a test suite at all. That's not what's going on here. But there were other thoughtboters on the project that poked a good amount of fun at me when they were like, "The first thing you did on this project was delete the test suite?" As I was like, "Yeah, I don't know, I was feeling spicy that day or something." But I think the test suite needs to serve the work that we're doing in the same way that everything else does. And so occasionally, yeah, deleting tests is absolutely the right thing and then probably add back some more. STEPH: It's funny how that reaction exists. And I've done it before myself where like, if you see commented out code and you put up a PR to remove it, I feel like most people are going to be like, yeah, yeah, that's great. Let's get rid of this. It's clearly not news. It's commented out. But then removing a skipped test then has people like, "Well, but that test looks like it could be valuable, and we're going to fix it." And it's like...all I can go back to is that silly example of like, you've got your skinny jeans, one day I'm going to fit into those skinny jeans. And so one day, I'm going to fix this test, and it's going to serve the purpose. And it's going to be the me I want to be. [laughs] And it is funny how we do that. With code, we're like, sure, we can get rid of it. But with tests, we feel this clinginess to them where we want to hold on to it and make it pass. And I think that sometimes has to do with the descriptions. There are test descriptions commented out that I've seen are like, user can log in, or if given a user without permission, they can't access. And it's like, oh, that sounds important. I'm now nervous to delete you versus fix you, but you're still not actually running and providing value. And so then I have to negotiate with myself as to where do we actually go from here? But I do love the idea of deleting tests that are skipped because we should just let them go. We either have to dedicate time to fix them or let them go and make that hard decision. CHRIS: The critical idea of future me will have more time, future me will be calm and will work through all the other bugs and future discounting; as far as I understand it as a formalization of the term, yeah, it's never true. I've only gotten busier over time, just broadly speaking. And that seems to be a truism in software projects as well. It's like, oh, we just have to write a bunch of features, and then it'll be calm. I don't even think I'd want that. But future me will not have more time. And so choosing the things that we do invest in versus not is tricky, but the idea of that future me will have a lot of time or future us probably not true. STEPH: Well, I think the story that I just shared at the beginning of our chat highlights that future me won't always be calm. [laughs] So let's work with what I've got. Let's not bank on that. Future Stephanie might be very emotional about dropping her dog off at boarding for a couple of days. [laughs] Future me might be very emotional about fixing this test. All right, well, thanks for going on that journey with me. That's really helpful. I knew you'd have some great insights there. Mid-roll Ad: Hi, friends, and now a quick break to hear from today's sponsor, Scout APM. Scout APM is an application performance monitoring tool that's designed to help developers find and fix performance issues quickly. With an intuitive user interface, Scout will tie bottlenecks to source code so you can quickly pinpoint and resolve performance abnormalities like N+1 queries, slow database queries, and memory bloat. Scout also recently implemented external service monitoring, adding even more granularity when it comes to HTTP requests and API calls. So give Scout a try today with a free 14-day trial and experience first-hand why developers worldwide call Scout their best friend. And as an added bonus for Bike Shed listeners, Scout will donate $5 to the open-source project of your choice when you deploy. To learn more, visit scoutapm.com/bikeshed. That's scoutapm.com/bikeshed. CHRIS: What's going on in my world? Last week we had our first ever Sagewell all-hands get-together in person. Many of us have met in person before, but not everyone. And so this was a combination celebration for our seed fundraising round, which had happened actually sometime right at the end of last year. But due to COVID in the world and complexity, it was difficult to get everybody together. So that finally happened. And then we sort of grafted on to that celebration, that party that we were having. Like, let's just extend a day in either direction and do some in-person working and all of that. And that was really great. I'm trying to find that ideal middle ground between we are a remote team, but there is definitely value in occasionally being in person, particularly getting to know people but also just having some higher bandwidth conversations, planning, things like that. They just feel different in person. And so, how do we balance that? And how do we be most productive and all that? But it was really great to meet the team more so than I had on the internet and get to spend some time in person and do some whiteboarding. I drew on a whiteboard with a team. We were all looking at the same whiteboard. We're in the same room. And I drew on a whiteboard some entity relationship diagrams. It was awesome. [laughs] It was super fun. It was one of those cases where we had built an assumption deeply into our codebase, and suddenly instead of having one of a thing, we may now have multiple of a thing. There's a wonderful blog post by Shawn Wang called Preemptive Pluralization which I think is based on an episode of Ben Orenstein's podcast, The Art of Product, where Ben basically framed the idea of like, I've never regretted pluralizing something earlier. A user has one account; they have multiple accounts. They just happen to have one at this time, et cetera. So we're in one of those. And it was a great thing to be able to be in a room and whiteboard. I knew at the time when I did it way back when that I was making the wrong decision. But I didn't know exactly how and the shape. And so now we have to do that fun refactoring so glad that we have a giant test suite that will help us with said refactoring. But yeah, so that was really great to be able to do in person. STEPH: I think there can be so much value in getting together and getting to see your team and, like you said, have those high-level conversations and then just also getting to hang out. So it's really nice to hear that reinforced since you experienced that same positivity from that experience. Do you think that's something that y'all will have going forward? Do you think you're going to try to get together like once a year, once a quarter? Maybe it hasn't even been talked about. But I'm hearing that it was great and that maybe there will be some repeats. CHRIS: Yes, yeah. I think I'm inclined to quarterly at a minimum and maybe even slightly more than that. Some of us are centered around Boston, and so it's a little bit easier for us to pop in and work at a WeWork, that sort of thing. But I think broadly, getting the team together and having that be intentional. And personally, I'm inclined to that being more social time than productive time because I think that's the thing that is most useful in person is building relationship and rapport and understanding folks better. I remember so pointedly when thoughtbot would have the annual Summer Summit, and leading up to that; there was a certain amount of conversation. But there were also location-specific rooms, and a lot of the conversation happened like in the Boston channel or whatnot. And then, without fail, every year after the Summer Summit, suddenly, there was a spike in cross-team chatter. Like, the Ruby room now had a bunch of people from San Francisco talking to Boston, talking to New York, et cetera. And it was just this incredibly clear...I think we could actually, like, I think at one point someone plotted the data, and there's just this stepwise jump that would happen every time. And so that sort of connecting folks is really what I believe in there. And the more we're leaning into the remote thing, then the more I think this is important. So I think quarterly is probably the lowest end that I would think of, but it might be more. And it's also a question of like, what shape does this take? Is it just us going and hanging out somewhere? Or are we productively trying to get together with a whiteboard? I think we'll figure that out as we go on. But it's definitely something that I'm glad we've done now, set the precedent for, and we'll hopefully do more of moving on. STEPH: Yeah, I always really love the thoughtbot Summits. In fact, we have one coming up. It's coming up in May, and this one's taking place in UK. But there have been some interesting conversations around Summit because before, it was the idea that everybody traveled. But typically, they were in Boston, so for me, it was particularly easy because it was already where I lived. So then showing up for Summit was no biggie. But with this one happening in UK and COVID and travel still being a concern, there's been more conversations around; okay, this is awesome. People who want to get together can. There are these events going on. But there are people who don't want to travel, don't feel up to travel. They have family obligations that then make it very difficult for them to leave one partner at home with the kids. And I myself I'm in that space where I thought really hard about whether I was going to travel or not. And I've decided not to just for personal reasons. But then it brings up the question of okay, well, if we have a number of people that are going to be in person together, then what about the people who are remote? And the idea of running something that's hybrid is not something that we've really figured out. But those that are remote, we're going to get together and figure out what we want to do and maybe what's our version of our remote summit since we're not going to be traveling. But I feel like that's definitely a direction that needs to be considered as teams are getting in person because if you do have people that can't make it, how can you still bring them in so it's an inclusive event but respect to the fact that they can't necessarily travel? I don't know if that's a concern that every team needs to have, but it's one that I've been thinking about with our team. And then I know others at thoughtbot we've been considering just because we do have such a disparate team. And we want to make everybody comfortable and feel included. CHRIS: Yeah, as with everything in this world, there's always complexities and subtlety. Thankfully, for our first get-together, we were able to get everyone into the same space. But I do wonder, especially as the team grows, even just scheduling, the logistics of it become really complicated. So then does the engineering team have get-togethers that are slightly different, and then there's like once yearly a big get-together of the whole team? Or how do you manage that and dealing with family situations and all that? It is very much a complicated thing that thankfully was very straightforward for us this first time, but I fully expect that we'll have to be all the more intentional with it moving forward. And, you know, that's just the game. But switching gears ever so slightly, we did have a fun thing that we've worked on a little bit over the past few weeks. We've finally landed it in the app. But we were swapping out our masked input library that we were using, so this is for someone entering their birthday, or a phone number, or social security number, or dates. I guess I already said dates. Passwords I think we also use here. But we have a bunch of different inputs in the app that behave specially. And my goodness, is this one of those things that falls into the category of, oh yeah, I assume this is a solved problem, right? We just have a library out there that does it. And each library is like, oh no, all of the other libraries are bad. I will come along, and I will write the one library to solve all of the problems, and then we'll be good. And it is just such a surprisingly complicated space. It feels like it should be more straightforward. And as I think about it, it's not; it's dealing with imperative interactions between a user and this input. And you need to transform it from what happens when you hit the delete key? What do you want to happen? What's the most discoverable for every user? How do we make sure they're accessible? But my goodness, was it complicated. I think we're happy with where we landed, but it was an adventure. STEPH: I'll be honest, that's something that I haven't given as much thought to. But I guess that's also I just haven't worked with that lately in terms of a particular library that then masks those inputs. So I'm curious, which library were using before, and then which one did you switch to? CHRIS: That's a critical piece of information that I have left off here. So for the previous one, we were using one called svelte-input-mask, which, again, part of the fun here is you want to have bindings into whatever framework that you're using. So svelte-input-mask is what we were using before. We have now moved on to using iMask, which is not like the thing you wear on your face, but it is the letter I so like igloo, Mike, et cetera, I-M-A-S-K, iMask. And so that is a lower-level library. There are bindings to other things. But for TypeScript and other reasons, we ended up implementing our own bindings in Svelte, which was actually relatively straightforward. Again, big fan of Svelte; it's a wonderful little framework. But that is what we're using now, and it is excellent. It's got a lot of features. We ended up using it in a slightly more simple version or implementation. It's got a lot of bells and whistles and configurations. We went up the middle with it. But yeah, we're on iMask, which also led to a very entertaining moment where it was interacting with our test suite in an interesting way. And so, one of the developers on the team searched for Capybara iMask. [laughs] And I forget exactly how it happened, but if you Google search that, for some reason, the internet thinks an iMask is a thing that goes over your mouth. And so it's a Capybara, like the animal, facemask. It's very confusing, but this got dropped into our Slack at one point, someone being like, "I searched for Capybara iMask, and it got weird, everybody." So yeah, that was a fun, little side quest that we got to go on. STEPH: [laughs] I just Googled it as you told me to, and it's adorable. Yeah, it's a face mask, and it has a little capybara cartoon on the front of it. Yeah, there are many of these. [laughs] CHRIS: When I think of an iMask, though, it's the thing that you put over your eyes to block the light if you want to sleep. But they're like, an iMask like, a mask that still keeps her eyes outside of it. I don't understand the internet. It's a weird place. STEPH: I think that was just Google saying Capybara iMask. Nope, don't know I, so let's put together Capybara mask, and that's what you got back. [laughs] CHRIS: I guess, yeah. It's just a Capybara mask. And I'm projecting the ‘I' because I phonetically heard that for a while. Anyway, yes. But yeah, masked inputs so complicated. STEPH: This is adorable. I feel like there should be swag for when people move. Like when people find things like this, this is the type of thing that then I stash and then wait for their anniversary at the company, and then I send it to them to remind them of this time that we had together. [laughs] There was also a moment where you said, ‘I.' You were explaining I as in in the letter I, not E-Y-E for eyemask. And you said igloo, and my brain definitely short-circuited for a minute to be like, did he just say igloo? Why did he say igloo? And it took me a minute to, oh, he's helping phonetically say that this is for the letter I. CHRIS: Yep. The NATO phonetic alphabet that if you don't explain that that's what you're doing, now I'm just naming random other objects in the world. Sorry. STEPH: [laughs] CHRIS: And that's why I cut myself off halfway through. I'm like, now you're just naming stuff. This isn't helping. STEPH: [laughs] CHRIS: Yes, the letter I, the letter M. [laughs] STEPH: All of that was a delightful journey for me, and I was curious. I'm glad you brought the test because I was curious if y'all are testing if things are getting obscured, but it sounds like y'all are, which is what helped give you confidence as you were switching over to the new library. CHRIS: Yeah, although to name it, we're not testing at a terribly low level. This is a great example of where I believe in feature specs. Like, within our Capybara feature spec, we are saying, and then as a user, I type in this value into the input. And critically, although this input needs to have special formatting and presentational behavior, it should functionally be identical. And so it was a very good litmus test of does this just work? And then, actually, our feature specs ended up in a race condition, which is just an annoying situation where Capybara moves so quickly that it represented a user. But as we were having that conversation, I was like, wait a minute; I know that users are slower than a computer. But is this actually an edge case that's real that we need to think about? And I think we did end up slightly changing our implementation. So our feature specs did, in a way, highlight that. But mostly, our feature specs did not need to change to adapt to and then fill in the formatted input. It was just fill in the input with the value. And that did not change at all, but it did put a tiny bit of pressure on our implementation to say, oh, there is a weird, tiny, little race condition here. Let's fix that. And so we did race conditions, no fun at all. STEPH: Interesting. Okay, so y'all aren't actually testing. Like, there's no test that says, "Hey, that when someone types into this field, that then there should be this different UI that's present because then we are obscuring the text that they're putting into this field." It was, as you mentioned, we're just testing that we changed over libraries, and everything still works. So then do you just go through that manual test of, then you go to staging, and then you test it that way? CHRIS: Yeah, that's a great question, yes, although as you say it, it's interesting. I guess there's a failure mode here or that our test suite does not enforce that the formatting masking behavior is happening. But it does test that the value goes through this input, gets submitted to the server, turns into the right type of value in the back end, all of that. And so I guess this is an example of how I think about testing, like, that's the critical bit, and then it's a nicety. It's an enhancement that we have this masking behavior. But if that broke, as long as the actual flow of data is still working, that can't break in a way that a user can't use. It sort of reminds me of the Mitch Hedberg joke, an escalator can never break, and it can only become stairs. And so I'm in that mindset here where a masked input that you have proper feature spec coverage around can never quote, unquote, "break." It can just become a plain text input. STEPH: I love how much that resonates with me. And I now know that when I'm writing tests, I'm going to think back to Mitch Hedberg and be like, oh, but is it broken-broken, or is it just now stairs? Because that's often how I will think of feature specs and how low level I will get with them. And this is on that boundary of like, yes, it's important that we want to obscure that data that someone's typing in, but it's not broken if it's not obscured. So there's that balance of I don't really want to test it. Someone will alert us. Like if that breaks, someone will alert us, and it's not the end of the world. It's just unfortunate. But if they can't sign in or they can't actually submit the form, that's a big problem. So yes, I love this comparison now of is it actually broken, or is it just stairs? [laughs] As a guideline for, how much should we test at this feature level or test in general? What should we care about? CHRIS: I feel like this is a deep truth that I believed for a long time. And I think I probably, somewhere in the back of my head, connected it to this joke. But I feel really good that I formally made that connection now because I feel like it helps me categorize this whole thing. Sorry for the convenience as a joke. And so yeah, that's where we're at. STEPH: For anyone that's not familiar with the comedian Mitch Hedberg, we'll be sure to include a link to that particular joke because it's delightful. And now it's connected to tech, which makes it just even more delightful. CHRIS: I only understand anything by analogy, especially humorous analogy. So this is just critical to my progression as a developer and technologist. STEPH: Yeah, I've learned over the years that there are two ways that I retain knowledge: it either caused me pain, or it made me laugh. Otherwise, it's mundane, and it gets filtered out. Laughter is, of course, my favorite. I mean, pain sticks with me as well. But if it's something that made me laugh, I just know I'm far more likely to retain it, and it's going to stick with me. Mid-Roll AD: And now a quick break to hear from today's sponsor, Studio 3T. When you're developing applications, it can often be a chore to work with your underlying data. Studio 3T equips you with a complete set of tools to work with MongoDB data. From building queries with drag and drop, to creating complex aggregation pipelines, Studio 3T makes it easy. And now, there's Studio 3T Free, a free edition of Studio 3T, which delivers an essential core of tools. This means you can get started, for free, with Studio 3T Free, and when you're ready, you can upgrade and enjoy even more features through Studio 3T Pro and Studio 3T Ultimate. The different editions unlock more tools and additional integrations with MongoDB, SQL, Oracle, and Sybase. You can start today by downloading Studio 3T Free, which also includes a 30-day free trial of all the features of Studio 3T Ultimate, so you can try out some of the enterprise features as well. No credit card required. To start your trial, head to studio3t.com/free. That's studio3t.com/free. CHRIS: On that wonderful framing there, I think we should wrap up. What do you think? STEPH: Let's wrap up. CHRIS: The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us at @_bikeshed or reach me on Twitter @SViccari. CHRIS: And I'm @christoomey. STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: 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.
Steph talks about starting a new project and identifying "focused" tests while Chris shares his latest strategy for managing flaky tests. They also ponder the squishy "it depends" side of software and respond to a listener question about testing all commits in a pull request. This episode is brought to you by ScoutAPM (https://scoutapm.com/bikeshed). Give Scout a try for free today and Scout will donate $5 to the open source project of your choice when you deploy. rspec-retry (https://github.com/NoRedInk/rspec-retry) Cassidy Williams - It Depends - GitHub Universe 2021 (https://www.youtube.com/watch?v=aMWh2uLO9OM) Say No To More Process (https://thoughtbot.com/blog/say-no-to-more-process-say-yes-to-trust) StandardRB (https://github.com/testdouble/standard) Become a Sponsor (https://thoughtbot.com/sponsorship) of The Bike Shed! Transcript: CHRIS: My new computer is due on the fourth. I'm so close. STEPH: On the fourth? CHRIS: On the fourth. STEPH: That's so exciting. CHRIS: And I'm very excited. But no, I don't want to upgrade any software on this computer anymore. Never again shall I update a piece of software on this computer. STEPH: [laughs] CHRIS: This is its final state. And then I will take its soul and move it into the new computer, and we'll go from there. [chuckles] STEPH: Take its soul. [laughs] CHRIS: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Chris Toomey. STEPH: And I'm Steph Viccari. CHRIS: And together, we're here to share a bit of what we learn along the way. So, Steph, what's new in your world? STEPH: Hey, Chris. Let's see. It's been kind of a busy week. It's been a busy family week. Utah, my dog, hasn't been feeling well as you know because you and I have chatted off-mic about that a bit. So he is still recovering from something, I don't know what. He's still on most days his normal captain chaos self, but then other days, he's not feeling well. So I'm just keeping a close eye on him. And then I also got some other family illnesses going on. So it has been a busy family week for sure. On the more technical project side, I am wrapping up my current project. So I have one more week, and then I will shift into a new project, which I'm very excited about. And you and I have chatted about this several times. So there's always just that interesting phase where you're trying to wrap up and hand things off and then accomplish last-minute wishlist items for a project before then you start with a new one. So I am currently in that phase. CHRIS: How long were you on this project for? STEPH: It'll be a total of I think eight months. CHRIS: Eight months, that's healthy. That's a bunch. It's always interesting to be on a project for that long but then not longer. There were plenty of three and four-month projects that I did. And you can definitely get a large body of work done. You can look back at it and proudly stare at the code that you have written. But that length of time is always interesting to me because you end up really...for me, when I've had projects that went that long but then not longer, I always found that to be an interesting breaking point. How are you feeling moving on from it? Are you ready for something new? Are you sad to be moving on? Do you feel attached to things? STEPH: It's always a mix. I'm definitely attached to the team, and then there are always lots of things that I'd still love to work on with that team. But then, I am also excited to start something new. That's why I love this role of consulting because then I get to hop around and see new projects and challenges and work with new people. I'm thinking seven to eight months might be a sweet spot for me in terms of the length of a project. Because I find that first month with a project, I'm really still ramping up, I'm getting comfortable, I'm getting in the groove, and I'm contributing within a short amount of time. But I still feel like that first month; I'm getting really comfortable with this new environment that I'm in. And so then I have that first month. And then, at six months, I have more of heads-down time. And I get to really focus and work with a team. And then there's that transition period, and it's nice to know when that's coming up for several weeks, so then I have a couple of weeks to then start working on that transition phase. So eight months might be perfect because then it's like a month for onboarding, ramping up, getting comfortable. And then six months of focus, and then another month of just focusing on what needs to be transitioned so then I can transition off the team. CHRIS: All right. Well, now we've defined it - eight months is the perfect length of a project. STEPH: That's one of the things I like about the Boost team is because we typically have longer engagements. So that was one of the reasons when we were splitting up the teams in thoughtbot that I chose the Boost team because I was like, yeah, I like the six-month-plus project. Speaking of that wishlist, there are little things that I've wanted to make improvements on but haven't really had time to do. There's one that's currently on my mind that I figured I'd share with you in case you have thoughts on it. But I am a big proponent of using the RSpec focus filter for when running tests. So that way, I can just prefix a context it block or describe block with F, and then RSpec I can just run all the tests. But RSpec will only run the tests that I've prefixed with that F focus command., and I love it. But we are running into some challenges with it because right now, there's nothing that catches that in a pull request. So if you commit that focus filter on some of your tests, and then that gets pushed up, if someone doesn't notice it while reviewing your pull request, then that gets merged into main. And all of the tests are still green, but it's only a subset of the tests that are actually running. And so it's been on my mind that I'd love something that's going to notice that, that's going to catch it, something that is not just us humans doing our best but something that's automated that's going to notice it for us. And I have some thoughts. But I'm curious, have you run into something like this? Do you have a way that you avoid things like that from sneaking into the main branch? CHRIS: Interestingly, I have not run into this particular problem with RSpec, and that's because of the way that I run RSpec tests. I almost never use the focus functionality where you actually change the code file to say, instead of it, it is now fit to focus that it. I tend to lean into the functionality where RSpec you can pass it the line number just say, file: and then line number. And RSpec will automatically figure out which either spec or context block or entire file. And also, I have Vim stuff that allows me to do that very easily from the file. It's very rare that I would want to run more than one file. So basically, with that, I have all of the flexibility I need. And it doesn't require any changes to the file. So that's almost always how I'm working in that mode. I really love that. And it makes me so sad when I go to JavaScript test runners because they don't have that. That said, I've definitely felt a very similar thing with ESLint and ESLint yelling at me for having a console.log. And I'm like, ESLint, I'm working here. I got to debug some stuff, so if you could just calm down for a minute. And what I would like is a differentiation between these are checks that should only run in CI but definitely need to run in CI. And so I think an equivalent would be there's probably a RuboCop rule that says disallow fit or disallow any of the focus versions for RSpec. But I only want those to run in CI. And this has been a pain point that I felt a bunch of times. And it's never been painful enough that I put in the effort to fix it. But I really dislike particularly that version of I'm in my editor, and I almost always want there to be no warnings within the editor. I love that TypeScript or ESLint, or other things can run within the editor and tell me what's going on. But I want them to be contextually aware. And that's the dream I've yet to get there. STEPH: I like the idea of ESLint having a work mode where you're like, back off, I am in work mode right now. [chuckles] I understand that I won't commit this. CHRIS: I'm working here. [laughter] STEPH: And I like the idea of a RuboCop. So that's where my mind went initially is like, well, maybe there's a custom cop, or maybe there's an existing one, and I just haven't noticed it yet. But so I'm adding a rule that says, hey, if you do see an fcontext, fdescribe, ffit, something like that, please fail. Please let us know, so we don't merge this in. So that's on my wishlist, not my to-don't list. That one is on my to-do list. CHRIS: I'm also intrigued, though, because the particular failure mode that you're describing is you take what is an entire spec suite, and instead, you focus down to one context block within a given file. So previously, there were 700 specs that ran, and now there are 12. And that's actually something that I would love for Circle or whatever platform you're running your tests on to be like, hey, just as a note, you had been slowly creeping up and had hit a high watermark of roughly 700 specs. And then today, we're down to 12. So either you did some aggressive grooming, or something's wrong. But a heuristic analysis of like, I know sometimes people delete specs, and that's a thing that's okay but probably not this many. So maybe something went wrong there. STEPH: I feel like we're turning CI into this friend at the bar that's like, "Hey, you've had a couple of drinks. I just wanted to check in with you to make sure that you're good." [laughs] CHRIS: Yes. STEPH: "You've had 100 tests that were running and now only 50. Hey, friend, how are you? What's going on?" CHRIS: "This doesn't sound like you. You're normally a little more level-headed." [laughs] And that's the CI that is my friend that keeps me honest. It's like, "Wait, you promised never to overspend anymore, and yet you're overspending." I'm like, "Thank you, CI. You're right; I did say I want the test to pass." STEPH: [laughs] I love it. I'll keep you posted if I figure something out; if I either turn CI into that friend, that lets me know when my behavior has changed in a concerning way, and an intervention is needed. Or, more likely, I will see if there's a RuboCop or some other process that I can apply that will check for this, which I imagine will be fast. I mean, we're very mindful about ensuring our test suite doesn't slow down as we're running it. But I'm just thinking about this out loud. If we add that additional cop, I imagine that will be fast. So I don't think that's too much of an overhead to add to our CI process. CHRIS: If you've already got RuboCop in there, I'm guessing the incremental cost of one additional cop is very small. But yeah, it is interesting. That general thing of I want CI to go fast; I definitely feel that feel. And we're slowly creeping up on the project I'm working on. I think we're at about somewhere between five to six minutes, but we've gotten there pretty quickly where not that long ago; it was only three minutes. We're adding a lot of features specs, and so they are definitely accruing slowdowns in our CI. And they're worth it; I think, because they're so valuable. And they test the whole integration of everything, but it's a thing that I'm very closely watching. And I have a long list of things that I might pursue when I decide it's time for CI to get a haircut, as it were. STEPH: I have a very hot tip for a way to speed up your test, and that is to check if any of your tests have a very long sleep in them. That came up recently [chuckles] this week where someone was working in a test and found some relic that had been added a while back that then wasn't caught. And I think it was a sleep 30. And they were like, "Hey, I just sped up our test by 30 seconds." I was like, ooh, we should grep now to see if there's anything else like that. [laughs] CHRIS: Oh, I love the sentence we should grep now. [laughter] The correct response to this is to grep immediately. I thought you were going to go with the pro tip of you can just focus down to one context block. And then the specs will run so much faster because you're ignoring most of them, but we don't want to do that. The sleep, though, that's a pro tip. And that does feel like a thing that there could be a cop for, like, never sleep more than...frankly, let's try not to sleep at all but also, add a sleep in our specs. We can sleep in life; it's important, but anyway. [chuckles] STEPH: [laughs] That was the second hot tip, and you got it. CHRIS: Lots of hot tips. Well, I'm going to put this in the category of good idea, terrible idea. I won't call it a hot tip. It's a thing we're trying. So much as we have tried to build a spec suite that is consistent and deterministic and tells us only the truth, feature specs, even in our best efforts, still end up flaking from time to time. We'll have feature specs that fail, and then eventually, on a subsequent rerun, they will pass. And I am of the mindset that A, we should try and look into those and see if there is a real cause to it. But sometimes, just the machinery of feature specs, there's so much going on there. We've got the additional overhead of we're running it within a JavaScript context. There's just so much there that...let me say what I did, and then we can talk more about the context. So there's a gem called RSpec::Retry. It comes from the wonderful folks over at NoRedInk, a well-known Elm shop for anyone out there in the Elm world. But RSpec::Retry does basically what it says in the name. If the spec fails, you can annotate specs. In our case, we've only enabled this for the feature specs. And you can tell it to retry, and you can say, "Retry up to this many times," and et cetera, et cetera. So I have enabled this for our feature specs. And I've only enabled it on CI. That's an important distinction. This does not run locally. So if you run a feature spec and it fails locally, that's a good chance for us to intervene and look at whether or not there's some flakiness there. But on CI, I particularly don't want the case where we have a pull request, everything's great, and we merge that pull request, and then the subsequent rebuild, which again, as a note, I would rather that Circle not rebuild it because we've already built that one. But that is another topic that I have talked about in the past, and we'll probably talk about it again in the future. But setting that aside, Circle will rebuild on the main branch when we merge in, and sometimes we'll see failures there. And that's where it's most painful. Like, this is now the deploy queue. This is trying to get this out into whatever environment we're deploying to. And it is very sad when that fails. And I have to go in and manually say, hey, rebuild. I know that this works because it just worked in the pull request, and it's the same commit hash. So I know deterministically for reasons that this should work. And then it does work on a rebuild. So we introduced RSpec::Retry. We have wrapped it around our feature specs. And so now I believe we have three possible retries. So if it fails once, it'll try it again, and then it'll try it a third time. So far, we've seen each time that it has had to step in; it will pass on the subsequent run. But I don't know; there was some very gentle pushback or concerns; let's call them when I introduced this pull request from another developer on the team, saying, "I don't know, though, I feel like this is something that we should solve at the root layer. The failures are a symptom of flaky tests, or inconsistency or et cetera, and so I'd rather not do this." And I said, "Yeah, I know. But I'm going to merge it," and then I merged it. We had a better conversation about that. I didn't just broadly overrule. But I said, "I get it, but I don't see the obvious place to shore this up. I don't see where we're doing weird inconsistent things in our code. This is just, I think, inherent complexity of feature specs." So I did it, but yeah, good idea, terrible idea. What do you think, Steph? Maybe terrible is too strong of a word. Good idea, mediocre idea. STEPH: I like the original branding. I like the good idea, terrible idea. Although you're right, that terrible is a very strong branding. So I am biased right now, so I'm going to lead in answering your question by stating that because our current project has that problem as well where we have these flaky tests. And it's one of those that, yes, we need to look at them. And we have fixed a large number of them, but there are still more of them. And it becomes a question of are we actually doing something wrong here that then we need to fix? Or, like you said, is it just the nature of these features-specs? Some of them are going to occasionally fail. What reasonable improvements can we make to address this at the root cause? I'm interested enough that I haven't heard of RSpec::Retry that I want to check it out because when you add that, you annotate a test. When a test fails, does it run the entire build, or will it rerun just that test? Do you happen to know? CHRIS: Just the test. So it's configured as in a round block on the feature specs. And so you tell it like, for any feature spec, it's like config.include for feature specs RSpec::Retry or whatever. So it's just going to rerun the one feature spec that failed when and if that happens. So it's very, very precise as well in that sense where when we have a failure merging into the main branch, I have to rebuild the whole thing. So that's five or six minutes plus whatever latency for me to notice it, et cetera, whereas this is two more seconds in our CI runtime. So that's great. But again, the question is, am I hiding? Am I dealing with the symptoms and not the root cause, et cetera? STEPH: Is there a report that's provided at the end that does show these are the tests that failed and we had to rerun them? CHRIS: I believe no-ish. You can configure it to output, but it's just going to be outputting to standard out, I believe. So along with the sea of green dots, you'll see had to retry this one. So it is visible, but it's not aggregated. And the particular thing is there's the JUnit reporter that we're using. So the XML common format for this is how long our tests took to run, and these ones passed and failed. So Circle, as a particular example, has platform-level insights for that kind of stuff. And they can tell you these are your tests that fail most commonly. These are the tests that take the longest run, et cetera. I would love to get it integrated into that such that retried and then surface this to Circle. Circle could then surface it to us. But right now, I don't believe that's happening. So it is truly I will not see it unless I actively go search for it. To be truly honest, I'm probably not doing that. STEPH: Yeah, that's a good, fair, honest answer. You mentioned earlier that if you want a test to retry, you have to annotate the test. Does that mean that you get to highlight specific tests that you're marking those to say, "Hey, I know that these are flaky. I'm okay with that. Please retry them." Or does it apply to all of them? CHRIS: I think there are different ways that you can configure it. You could go the granular route of we know this is a flaky spec, so we're going to only put the retry logic around it. And that would be a normal RSpec annotation sort of tagging the spec, I think, is the terminology there. But we've configured it globally for all feature specs. So in a spec support file, we just say config.include Rspec::Retry where type is a feature. And so every feature spec now has the possibility to retry. If they pass on the first pass, which is the hope most of the time, then they will not be tried. But if they don't, if they fail, then they'll be retried up to three times or up to two additional times, I think is the total. STEPH: Okay, cool. That's helpful. So then I think I have my answer. I really think it's a good idea to automate retrying tests that we have identified that are flaky. We've tried to address the root, and our resolution was this is fine. This happens sometimes. We don't have a great way to improve this, and we want to keep the test. So we're going to highlight that this test we want to retry. And then I'm going to say it's not a great idea to turn it on for all of them just because then I have that same fear about you're now hiding any flaky tests that get introduced into the system. And nobody reasonably is going to go and read through to see which tests are going to get retried, so that part makes me nervous. CHRIS: I like it. I think it's a balanced and reasonable set of good and terrible idea. Ooh, it's perfect. I don't think we've had a balanced answer on that yet. STEPH: I don't think so. CHRIS: This is a new outcome for this segment. I agree. Ideally, in my mind, it would be getting into that XML format, the output from the tests, so that we now have this artifact, we can see which ones are flaky and eventually apply effort there. What you're saying feels totally right of we should be more particular and granular. But at the same time, the failure mode and the thing that I'm trying, I want to keep deploys going. And I only want to stop deploys if something's really broken. And if a spec retries, then I'm fine with it is where I've landed, particularly because we haven't had any real solutions where there was anything weird in our code. Like, there's just flakiness sometimes. As I say it, I feel like I'm just giving up. [laughs] And I can hear this tone of stuff's just hard sometimes, and so I've taken the easy way out. And I guess that's where I'm at right now. But I think what you're saying is a good, balanced answer here. I like it. I don't know if I'm going to do anything about it, but...[laughter] STEPH: Well, going back to when I was saying that I'm biased, our team is feeling this pain because we have flaky tests. And we're creating tickets, and we're trying to do all the right things. We create a ticket. We have that. So it's public. So people know it's been acknowledged. If someone's working on it, we let the team know; hey, I'm working on this. So we're not duplicating efforts. And so, we are trying to address all of them. But then some of them don't feel like a great investment of our time trying to improve. So that's what I really do like about the RSpec::Retry is then you can still have a resolution. Because it's either right now your resolution is to fix it or to change the code, so then maybe you can test it in a different way. There's not really a good medium step there. And so the retry feels like an additional good outcome to add to your tool bag to say, hey, I've triaged this, and this feels reasonable that we want to retry this. But then there's also that concern of we don't want to hide all of these flaky tests from ourselves in case we have done it and there is an opportunity for us to improve it. So I think that's what I do really like about it because right now, for us, when a test fails, we have to rerun the entire build, and that's painful. So if tests are taking about 20 minutes right now, then one spec fails, and then you have to wait another 20 minutes. CHRIS: I would have turned this on years ago with a 20-minute build time. [chuckles] STEPH: [laughs] Yeah, you're not wrong. But also, I didn't actually know about RSpec::Retry until today. So that may be something that we introduce into our application or something that I bring up to the team to see if it's something that we want to add. But it is interesting that initial sort of ooh kind of feeling that the team will give you introducing because it feels bad. It feels wrong to be like, hey, we're just going to let these flaky tests live on, and we're going to automate retrying them to at least speed us up. And it's just a very interesting conversation around where we want to invest our time and between the risk and pay off. And I had a similar experience this week where I had that conversation, but this one was more with myself where I was working through a particular issue where we have a state in the application where something weird was done in the past that led us to a weird state. And so someone raised a very good question where it's like, well, if what you're saying is technically an impossible state, we should make it impossible, like at the database layer. And I love that phrase. And yet, there was a part of me that was like, yes, but also doing that is not a trivial investment. And we're here because of a very weird thing that happened before. It felt one of those interesting, like, do we want to pursue the more aggressive, like, let's make this impossible for the future? Or do we want to address it for now and see if it comes back up, and then we can invest more time in it? And I had a hard time walking myself through that because my initial response was, well, yeah, totally, we should make it impossible. But then I walked through all the steps that it would take to make that happen, and it was not very trivial. And so it was one of those; it felt like the change that we ended up with was still an improvement. It was going to prevent users from seeing an error. It was still going to communicate that this state is an odd state for the application to be in. But it didn't go as far as to then add in all of the safety measures. And I felt good about it. But I had to convince myself to feel good about it. CHRIS: What you're describing there, the whole thought sequence, really feels like the encapsulation of it depends. And that being part of the journey of learning how to do software development and what it means. And you actually shared a wonderful video with me yesterday, and it was Cassidy Williams at GitHub Universe. And it was her talking to her younger self, and just it depends, and it was so true. So we will include a link to that in the show note because that was a wonderful thing for you to share. And it really does encapsulate this thing. And from the outside, before I started doing software development, I'm like, it's cool. I'm going to learn how to sling code and fix the stuff and hack, and it'll be great, and obvious, and correct, and knowable. And now I'm like, oh man, squishy nonsense. That's all it is. STEPH: [laughs] CHRIS: Fun squishy, and I like it. It's so good. But it depends. Exactly that one where you're like, I know that there's a way to get to correctness here but is it worth the effort? And looping back to...I'm surprised at the stance that I've taken where I'm just like, yeah, I'm putting in RSpec::Retry. This feels like the right thing. I feel good about this decision. And so I've tried to poke at it a tiny bit. And I think what matters to me deeply in a list of priorities is number one correctness. I care deeply that our system behaves correctly as intended and that we are able to verify that. I want to know if the system is not behaving correctly. And that's what we've talked about, like, if the test suite is green, I want to be able to deploy. I want to feel confident in that. Flaky specs exist in this interesting space where if there is a real underlying issue, if we've architected our system in a way that causes this flakiness and that a user may ever experience that, then that is a broken system. That is an incorrect system, and I want to resolve that. But that's not the case with what we're experiencing. We're happy with the architecture of our system. And when we're resolving it, we're not even really resolving them. We're just rerunning manually at this point. We're just like, oh, that spec flaked. And there's nothing to do here because sometimes that just happens. So we're re-running manually. And so my belief is if I see all green, if the specs all pass, I know that I can deploy to production. And so if occasionally a spec is going to flake and retrying it will make it pass (and I know that pass doesn't mean oh, this time it happened to pass; it's that is the correct outcome) and we have a false negative before, then I'm happy to instrument the system in a way that hides that from me because, at this point, it does feel like noise. I'm not doing anything else with the failures when we were looking at them more pointedly. I'm not resolving those flaky specs. There are no changes that we've made to the underlying system. And they don't represent a failure mode or an incorrectness that an end-user might see. So I honestly want to paper over and hide it from myself. And that's why I've chosen this. But you can see I need to defend my actions here because I feel weird. I feel a little off about this. But as I talk through it, that is the hierarchy. I care about correctness. And then, the next thing I care about is maintaining the deployment pipeline. I want that to be as quick and as efficient as possible. And I've talked a bunch about explorations into the world of observability and trying to figure out how to do continuous deployment because I think that really encourages overall better engineering outcomes. And so first is correctness. Second is velocity. And flaky specs impact velocity heavily, but they don't actually impact correctness in the particular mode that we're experiencing them here. They definitely can. But in this case, as I look at the code, I'm like, nah, that was just noise in the system. That was just too much complexity stacked up in trying to run a feature spec that simulates a browser and a user clicking in JavaScript and all this stuff and the things. But again, [laughs] here I am. I am very defensive about this apparently. STEPH: Well, I can certainly relate because I was defending my answer to myself earlier. And it is really interesting what you're pointing out. I like how you appreciate correctness and then velocity, that those are the two things that you're going after. And flaky tests often don't highlight an incorrect system. It is highlighting that maybe our code or our tests are not as performant as we would like them to be, but the behavior is correct. So I think that's a really important thing to recognize. The part where I get squishy is where we have encountered on this project some flaky tests that did highlight that we had incorrect behavior, and there's only been maybe one or two. It was rare that it happened, but it at least has happened once or twice where it highlighted something to us that when tests were run...I think there's a whole lot of context. I won't get into it. But essentially, when tests were being run in a particular way that made them look like a flaky test, it was actually telling us something truthful about the system, that something was behaving in a way that we didn't want it to behave. So that's why I still like that triage that you have to go through. But I also agree that if you're trying to get out at a deploy, you don't want to have to deal with flaky tests. There's a time to eat your vegetables, and I don't know if it's when you've got a deploy that needs to go out. That might not be the right time to be like, oh, we've got a flaky test. We should really address this. It's like, yes; you should note to yourself, hey, have a couple of vegetables tomorrow, make a ticket, and address that flaky test but not right now. That's not the time. So I think you've struck a good balance. But I also do like the idea of annotating specific tests instead of just retrying all of them, so you don't hide anything from yourself. CHRIS: Yeah. And now that I'm saying it and now that I'm circling back around, what I'm saying is true of everything we've done so far. But it is possible that now this new mode that the system behaves in where it will essentially hide flaky specs on CI means that any new flaky regressions, as it were, will be hidden from us. And thus far, almost all or I think all of the flakiness that we've seen has basically been related to timeouts. So a different way to solve this would potentially be to up the Capybara wait time. So there are occasionally times where the system's churning through, and the various layers of the feature specs just take a little bit longer. And so they miss...I forget what it is, but it's like two seconds right now or something like that. And I can just bump that up and say it's 10 seconds. And that's a mode that if eventually, the system ends in the state that we want, I'm happy to wait a little longer to see that, and that's fine. But there are...to name some of the ways that flaky tests can actually highlight truly incorrect things; race conditions are a pretty common one where this behaves fine most of the time. But if the background job happens to succeed before the subsequent request happens, then you'll go to the page. That's a thing that a real user may experience, and in fact, it might even be more likely in production because production has differential performance characteristics on your background jobs versus your actual application. And so that's the sort of thing that would definitely be worth keeping in mind. Additionally, if there are order issues within your spec suite if the randomize...I think actually RSpec::Retry wouldn't fix this, though, because it's going to retry within the same order. So that's a case that I think would be still highlighted. It would fail three times and then move on. But those we should definitely deal with. That's a test-related thing. But the first one, race conditions, that's totally a thing. They come up all the time. And I think I've potentially hidden that from myself now. And so, I might need to lock back what I said earlier because I feel like it's been true thus far that that has not been the failure mode, but it could be moving forward. And so I really want to find out if we got flaky specs. I don't know; I feel like I've said enough about this. So I'm going to stop saying anything new. [laughs] Do you have any other thoughts on this topic? STEPH: Our emotions are a pendulum. We swing hard one way, and then we have to wait till we come back and settle in the middle. But there's that initial passion play where you're really frustrated by something, and then you swing, and you settle back towards something that's a little more neutral. CHRIS: I don't trust anyone who pretends like their opinions never change. It doesn't feel like a good way to be. STEPH: Oh, I hope that...Do people say that? I hope that's not true. I hope we are all changing our opinions as we get more information. CHRIS: Me too. Mid-roll Ad And now a quick break to hear from today's sponsor, Scout APM. Scout APM is leading-edge application performance monitoring that's designed to help Rails developers quickly find and fix performance issues without having to deal with the headache or overhead of enterprise platform feature bloat. With a developer-centric UI and tracing logic that ties bottlenecks to source code, you can quickly pinpoint and resolve those performance abnormalities like N+1 queries, slow database queries, memory bloat, and much more. Scout's real-time alerting and weekly digest emails let you rest easy knowing Scout's on watch and resolving performance issues before your customers ever see them. Scout has also launched its new error monitoring feature add-on for Python applications. Now you can connect your error reporting and application monitoring data on one platform. See for yourself why developers call Scout their best friend and try our error monitoring and APM free for 14 days; no credit card needed. And as an added-on bonus for Bike Shed listeners, Scout will donate $5 to the open-source project of your choice when you deploy. Learn more at scoutapm.com/bikeshed. That's scoutapm.com/bikeshed. CHRIS: Well, shifting only ever so slightly because it turns out it's a very related question, but we have a listener question. As always, thank you so much to everyone who sends in listener questions. We really appreciate them. And today's question comes from Mikhail, and he writes in, "Regarding the discussion in Episode 311 on requiring commits merged to be tested, I have a question on how you view multi commit PRs. Do you think all the commits in a PR should be tested or only the last one? If you test all commits in a PR, do you have any good tips on setups for that? Would you want all commits to pass all tests? For one, it helps a lot when using Git bisect. It is also a question of keeping the history clean and understandable. As a background on the project I currently work on, we have the opinion that all commits should be tested and working. We have now decided on single commit PRs only since this is the only way that we can currently get the setup reasonably on our CI. I would like to sometimes make PRs with more than one commit since I want to make commits as small as possible. In order to do that, we would have to find a way to make sure all commits in the PR are tested. There seems to be some hacky ways to accomplish this, but there is not much talk about it. Also, we are strict in requiring a linear history in all our projects. Kind regards, Mikhail." So, Steph, what do you think? STEPH: I remember reading this question when it came in. And I have an experience this week that is relevant to this mainly because I had seen this question, and I was thinking about it. And off the cuff, I haven't really thought about this. I haven't been very concerned about ensuring every single commit passes because I want to ensure that, ultimately, the final commit that I have is going in. But I also rarely have more than one commit in a PR. So that's often my default mode. There are a couple of times that I'll have two, maybe three commits, but I think that's pretty rare for me. I'll typically have just one commit. So I haven't thought about this heavily. And it's not something that frankly I've been concerned about or that I've run into issues with. From their perspective about using Git bisect, I could see how that could be troublesome, like if you're looking at a commit and you realize there's a particular commit that's already merged and that fails. The other area that I could think of where this could be problematic is if you're trying to roll back to a specific commit. And if you accidentally roll back to a commit that is technically broken, but you didn't know that because it was not the final commit as was getting tested on CI, that could happen. I haven't seen that happen. I haven't experienced it. So while that does seem like a legitimate concern, it's also one that I frankly just haven't had. But because I read this question from this person earlier this week, I actually thought about it when I was crafting a PR that had several commits in it, which is kind of unusual for me since I'm usually one or two commits in a PR. But for this one, I had several because we use standard RB in our project to handle all the formatting. And right now, we have one of those standard to-do files because we added it to the project. But there are still a number of manual fixes that need to be applied. So we just have this list of files that still need to be formatted. And as someone touches that file, we will format it, and then we'll take it out of that to-do list. So then standard RB will include it as it's linting all of our files. And I decided to do that for all of our spec files. Because I was like, well, this was the safest chunk of files to format that will require the least amount of review from folks. So I just want to address all of them in one go. But I separated the more interesting changes into different commits just to make others aware of, like, hey, this is something standard RB wants. And it was interesting enough that I thought I would point it out. So my first commit removed all the files from that to-do list, but then my other commits are the ones that made actual changes to some of those files that needed to be corrected. So technically, one or two of my middle commits didn't pass the standard RB linting. But because CI was only running that final commit, it didn't notice that. And I thought about this question, and so I intentionally went back and made sure each of those commits were correct at that point in time. And I feel good about that. But I still don't feel the need to add more process around ensuring each commit is going to be green. I think I would lean more in favor of let's keep our PR small to one or two commits. But I don't know; it's something I haven't really run into. It's an interesting question. How about you? What are your experiences, or what are your thoughts on this, Chris? CHRIS: When this question came through, I thought it was such an interesting example of considering the cost of process changes. And to once again reference one of our favorite blog posts by German Velasco, the Say No to More Process post, which we will, of course, link in the show notes. This is such a great example of there was likely a small amount of pain that was felt at one point where someone tried to run git bisect. They ran into a troublesome commit, and they were like, oh no, this happened. We need to add processes, add automation, add control to make sure this never happens again. Personally, I run git bisect very rarely. When I do, it's always a heroic moment just to get it started and to even know which is the good and which is the bad. It's always a thing anyway. So it would be sad if I ran into one of these commits. But I think this is a pretty rare outcome. I think in the particular case that you're talking about, there's probably a way to actually tease that apart. I think it sounds like you fixed those commits knowing this, maybe because you just put it in your head. But the idea that the process that this team is working on has been changed such that they only now allow single commit PRs feels like too much process in my mind. I think I'm probably 80%, maybe 90% of the time; it's only a single commit in a PR for me. But occasionally, I really value having the ability to break it out into discrete steps, like these are all logically grouped in one changeset that I want to send through. But they're discrete steps that I want to break apart so that the team can more easily review it so that we have granular separation, and I can highlight this as a reference. That's often something that I'll do is I want this commit to standalone because I want it to be referenced later on. I don't want to just fold it into the broader context in which it happened, but it's pretty rare. And so to say that we can't do that feels like we're adding process where it may not be worth it, where the cost of that process change is too high relative to the value that we're getting, which is speculatively being able to run git bisect and not hit something problematic in the future. There's also the more purist, dogmatic view of well, all commits should be passing, of course. Yeah, I totally agree with that. But what's it worth to you? How much are you willing to spend to achieve that goal? I care deeply about the correctness of my system but only the current correctness. I don't care about historical correctness as much, some. I think I'm diminishing this more than I mean to. But really back to that core question of yes, this thing has value, but is it worth the cost that we have to pay in terms of process, in terms of automation and maintenance of that automation over time, et cetera or whatever the outcome is? Is it worth that cost? And in this case, for me, this would not be worth the cost. And I would not want to adopt a workflow that says we can only ever have single commit PRs, or all commits must be run on CI or any of those variants. STEPH: This is an interesting situation where I very much agree with everything you're saying. But I actually feel like what Mikhail wants in this world; I want it too. I think it's correct in the way that I do want all the commits to pass, and I do want to know that. And I think since I do fall into the default, like you mentioned, 80%, 90% of my PRs are one commit. I just already have that. And the fact that they're enforcing that with their team is interesting. And I'm trying to think through why that feels cumbersome to enforce that. And I'm with you where I'll maybe have a refactor commit or something that goes before. And it's like, well, what's wrong with splitting that out into a separate PR? What's the pain point of that? And I think the pain point is the fact that one, you have two PRs that are stacked on each other. So you have the first one that you need to get reviewed, and then the second one; there's that bit of having to hop between the two if there's some shared context that someone can't just easily review in one pull request. But then there's also, as we just mentioned, there's CI that has to run. And so now it's running on both of them, even though maybe that's a good thing because it's running on both commits. I like the idea that every commit is tested, and every commit is green. But I actually feel like it's some of our other processes that make it cumbersome and hard to get there. And if CI did run on every commit, I think it would be ideal, but then we are increasing our CI time by running it on every commit. And then it comes down to essentially what you said, what's the risk? So if we do merge in a commit that doesn't work or has something that's failing about it but then the next commit after that fixes it, what's the risk that we're going to roll back to that one specific commit that was broken? If that's a high risk for you and your team, then adding this process is probably the really wise thing to do because you want to make sure the app doesn't go down for users. That's incredibly important. If that's not a high risk for your team, then I wouldn't add the process. CHRIS: Yeah, I totally agree. And to clarify my stances, for me, this change, this process change would not be worth the trade-off. I love the idea. I love the goal of it. But it is not worth the process change, and that's partly because I haven't particularly felt the pain. CI is not an inexhaustible resource I have learned. I'm actually somewhat proud our very small team that is working on the project that we're working on; we just recently ran out of our CI budget, and Circle was like, "Hey, we got to charge you more." And I was like, "Cool, do that." But it was like, there is cost both in terms of the time, clock time, and each PR running and all of those. We have to consider all of these different things. And hopefully, we did a useful job of framing the conversation, because as always, it depends, but it depends on what. And in this case, there's a good outcome that we want to get to, but there's an associated cost. And for any individual team, how you weigh the positive of the outcome versus how you weigh the cost will alter the decision that you make. But that's I think, critically, the thing that we have to consider. I've also noticed I've seen this conversation play out within teams where one individual may acutely feel the pain, and therefore they're anchored in that side. And the cost is irrelevant to them because they're like, I feel this pain so acutely, but other people on the team aren't working in that part of the codebase or aren't dealing with bug triage in the same way that that other developer is. And so, even within a team, there may be different levels of how you measure that. And being able to have meaningful conversations around that and productively come to a group decision and own that and move forward with that is the hard work but the important work that we have to do. STEPH: Yeah. I think that's a great summary; it depends. On that note, shall we wrap up? CHRIS: Let's wrap up. The show notes for this episode can be found at bikeshed.fm. STEPH: This show is produced and edited by Mandy Moore. CHRIS: 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, as it really helps other folks find the show. STEPH: If you have any feedback for this or any of our other episodes, you can reach us at @_bikeshed or reach me on Twitter @SViccari. CHRIS: And I'm @christoomey STEPH: Or you can reach us at hosts@bikeshed.fm via email. CHRIS: Thanks so much for listening to The Bike Shed, and we'll see you next week. All: Byeeeeeeeeee! 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.
You know what really grinds Chris' gears? (Spoiler Alert: It's Single-Page Applications.) Steph needs some consulting help. So much to do, so little time. Sarah Drasner tweet about shared element transitions (https://twitter.com/sarah_edo/status/1431282994581413893) Article about Page Transitions API (https://developer.chrome.com/blog/shared-element-transitions-for-spas/) Svelte Crossfade layout demo (https://svelte.dev/repl/a7af336f906c4caab3936972754e4d6f?version=3.23.2) Svelte Crossfade tutorial page (https://svelte.dev/tutorial/deferred-transitions) (Note - click "Show Me" on the bottom left) Transcript: CHRIS: I have restarted my recording, and we are now recording. And we are off on the golden roads. Isn't software fun? STEPH: Podcast battle. Here we go! Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Steph Viccari. CHRIS: And I'm Chris Toomey. STEPH: And together, we're here to share a bit of what we've learned along the way. Hey, Chris, happy Friday. How's your week been? CHRIS: Happy Friday to you as well. My week's been good with the exception of right before we started this recording, I had one of those experiences. You know the thing where software is bad and software is just terrible overall? I had one of those. And very briefly to describe it, I started recording, but I could hear some feedback in my headphones. So I was like, oh no, is that feedback going to show up on the final recording? Which I really hope it doesn't. Spoiler alert - listener, if I sound off, sorry about that. But so I stopped recording and then I went to go listen to the file, and I have our audio software configured to record directly to the desktop. And it does that normally quite well. But for some reason, the file wasn't there. But I remember this recently because I ran into it another time. For some reason, this is Finder failing me. So the thing that shows me the files in a graphical format, at least on my operating system. Although I think it also messes up in the terminal maybe. That feels like it shouldn't be true, but maybe it is. Anyway, I had to kill all Finder from the terminal to aggressively restart that process. And then suddenly, Finder was like, oh yeah, there's totally files there, absolutely. They were there the whole time. Why do you even ask? And I know that state management is a hard problem, I am aware. I have felt this pain. I have been the person who has introduced some bugs related to it, but that's not where I want to experience it. Finder is one of those applications that I want to just implicitly trust, never question whether or not it's just sneakily telling me that there are files that are not there or vice versa. So anyway, software. STEPH: I'm worried for your OS. I feel like there's a theme lately [chuckles] in the struggles of your computer. CHRIS: On a related note, I had to turn off transparency in my terminal because it was making my computer get very hot. [chuckles] STEPH: Oh no, you're not a hacker any more. CHRIS: I'm not. [chuckles] I just have a weird screen that's just dark. And jellybeans is my color scheme, so there's that going on. That's in Vim specifically. Pure is my prompt. That's a lovely little prompt. But lots of Day-Glo colors on just a black background, not the cool hacker transparency. I have lost some street cred. STEPH: What is your prompt? What did you say it is? CHRIS: Pure. STEPH: Pure, I don't know that one. CHRIS: It is by Sindre Sorhus; I think is his name. That's his Twitter handle, GitHub name. He is a prolific open-source creator in the Node world, particularly. But he created this...I think it's a Bash and a Zsh prompt. It might be for others as well. It's got a bunch of features. It's pretty fast. It's minimal. It got me to stop messing around with my prompt, which was mostly what I was going for. And it has a nice benefit that occasionally now I'll be pairing with someone, and I'll be like, "Your prompt looks like my prompt. Everything is familiar. This is great." STEPH: Well, if you get back in the waters of messing around with your prompts again, I'm using Starship. And I hadn't heard of Pure before, but I really like Starship. That's been my new favorite. CHRIS: Wow. STEPH: Wow. CHRIS: I mean, on the one hand… STEPH: You're welcome. [laughs] CHRIS: On the one hand, thank you. On the other hand, again, let me lead in with the goal was to stop messing around with my prompt. So you're like, oh, cool. Here's another prompt for you, though. [chuckles] STEPH: [laughs] But my goal is to nerd snipe you into trying more things because it's fun. CHRIS: I don't know if you know this, but I am impervious to nerd sniping. STEPH: [laughs] CHRIS: So try as you might, I shall remain steady in my course of action. STEPH: Are we playing two truths and a lie? Is that what we're doing today? [laughs] CHRIS: Nah, just one lie. It's easier. Everybody wins one lie. STEPH: [laughs] CHRIS: But anyway, in other news, we're going to do a segment called this really grinds my gears. That's today's segment, which is much like when I do a good idea, terrible idea. But this is one that I'm sure I've talked about before. But there's been some stuff that I saw moving around on the internet as one does, and it got these ideas back into my head. And it's around the phrase single-page application. I am not a fan of that phrase or SPA as the initialism. Thank you, Edward Loveall, for teaching me the difference between an initialism and an acronym. I really hope I'm getting it right, by the way, [laughs] SPA as people call them these days. I feel weird because of how much I care about this thing, how much I care about this idea, and how much whenever I hear this acronym, I get a little bit unhappy. And so there's a part of it that's I really do think our words shape our thinking. And I think single-page application has some deeply problematic ideas. Most notably, I think one of the most important things about building web applications is the URL. And those are different pages, at least in my head. I don't know of a different way to think about this. But if you are not emphasizing the URL and the fact that the URL is a way to address different pages or resources within your application, then you are throwing away one of the greatest advancements that humankind has made, in my mind. I care a lot about URLs; it turns out. And it's not inherent to an SPA that you will not be thinking about URLs. But again, in that idea that our words shape our thinking, by calling it an SPA, by leaning into that idea, I think you are starting down a path that leads to bad outcomes. I'm going to pause there because I'm getting kind of ranty. I got more to say on the topic. But what do you think? STEPH: Yeah, these are hot takes. I'm into it. I'm pretty sure that I know why URLs are so important to you and more of your feelings around why they're important. But would you dive in a bit deeper as to why you really cherish URLs, and why they're so important, and why they're one of the greatest advancements of humanity? CHRIS: [laughs] It sounds lofty when you say it back to me, but yeah. It's interesting that as you put into a question, it is a little bit hard to name. So there are certain aspects that are somewhat obvious. I love the idea that I can bookmark or share a given resource or representation of a resource very simply. Like the URL, it's this known thing. We can put hyperlinks in a document. It's this shared way to communicate, frankly, very complex things. And when I think of a URL, it's not just the domain and the path, but it's also any query parameters. So if you imagine faceted search on a website, you can be like, oh, filter down to these and only ones that are more than $10, and only ones that have a future start date and all those kinds of nuance. If you serialize that into the URL as part of the query param, then that even more nuanced view of this resource is shareable is bookmarkable is revisitable. I end up making Alfred Workflows that take advantage of the fact that, like, oh, I can look at this URL scheme, and I can see where different parts are interpolated. And so I can navigate directly to any given thing so fast. And that's deeply valuable, and it just falls naturally out of the idea that we have URLs. And so to not deeply embrace that, to not really wrap your arms around it and give that idea a big hug feels weird to me. STEPH: Yeah, I agree. I remember we've had this conversation in the past, and it really frustrates me when I can't share specific resources with folks because I don't know how to link to it. So then I can send you a link to the application itself to the top URL. But then I have to tell you how to find the information that I thought was really helpful. And that feels like a step backward. CHRIS: Yeah. That ability to say, "Follow this link, and then it will be obvious," versus "Go to this page, click on this thing, click on the dropdown, click on this other thing." Like, that's just a fundamentally different experience. So one of the things that I saw that got me thinking about this was I saw folks referring to single-page applications but then contrasting them with MPAs, which are multiple-page applications. STEPH: So the normal application? [laughs] CHRIS: And I was like, whoa, whoa, everybody. You mean like a website or a web app? As much as I was angry at the first initialism, this second one's really getting me going. But it really does speak to what are we doing? What are we trying to build? And as with anything, you could treat this as a binary as just like there are two options. There are either websites which, yeah, those have got a bunch of URLs, and that's all the stuff. And then there are web apps, and they're different. And it's a bundle of JavaScript that comes down, boots up on the client, and then it's an app thing. And who cares about URLs? I think very few people would actually fall in that camp. So I don't really believe that there is a dichotomy here. I think, as always, it's a continuum; it's a spectrum. But leaning into the nomenclature of single-page application, I think pushes you more towards that latter end of the spectrum. I think there are other things that fall out of it. Like, I believe deeply in having the server know more, have more of the logic, own more of the logic, own more authorization and routing, and all of those things because really great stuff falls out of that. And that one has more of a trade-off, I'd say. But I won't name any names, but there is a multiple billion-dollar company whose website I had to interact with recently. And you land on their page on their marketing site. And then, if you click log in, it navigates you to the application, so a separate domain or a separate subdomain, the application subdomain, and the login page there. And the login page renders, and then I go to fill in my username and password. Like, my mouse makes it all the way to click on the little box or whatever I'm doing if I'm using keyboard things. But I have enough time to actually start to interact with this page. And then suddenly, it rips away, and it actually just renders the authenticated application because it turns out I was already logged in. But behind the scenes, they're doing some JWT dance around that they're checking; oh no, no, you're already logged in, so never mind. We don't need to show you the login page, but I was already on the login page. And my feeling is this sort of brittle UI; this sort of inconsistency erodes my trust in that application, particularly when I'm on the login page. That is a page that matters. I don't believe that they're doing anything fundamentally insecure. But I do have the question in my head now. I'm like, wait, what's going on there, everybody? Is it fine? Was that okay? Or if you see something that you shouldn't see and then suddenly it's ripped away from you, if you see half of a layout that's rendered on a page and then suddenly you see, no, no, no, you actually don't have access to that page, that experience erodes my trust. And so, I would rather wait for the server to fully resolve, determine what's going to happen, and then we get a response that is holistically consistent. You either have access, or you don't, that sort of thing. Give me a loading indicator; give me those sorts of things. I'm fine with that. But don't render half of a layout and then redirect me back away. STEPH: I feel like that's one of the problems with knowing too much because most people are not going to pick up on a lot of the things that you're noticing and caring deeply about where they would just see like, oh, I was logged in and be like, huh, okay, that was a little weird, but I'm in and just continue on. Versus other folks who work very closely to this who may recognize and say, "That was weird." And the fact that you asked me to log in, but then I was already logged in, did you actually log me in correctly? What's happening? And then it makes you nervous. CHRIS: Maybe. Probably. But I wonder…the way you just said that sounds like another dichotomy. And I would say it's probably more of a continuum of an average not terribly tech-savvy user would still have a feeling of huh, that was weird. And that's enough. That's a little tickle in the back of your brain. It's like, huh, that was weird. And if that happens enough times or if you've seen someone who uses an application and uses it consistently, if that application is reasonably fast and somewhat intuitive and consistent, then they can move through it very quickly and very confidently. But if you have an app that half loads and then swaps you to another page and other things like that, it's very hard to move confidently through an application like that. I do think you're right in saying that I am over-indexed on this, and I probably care more than the average person, but I do care a lot. I do think one of the reasons that I think this happens is mobile applications came along, and they showed us a different experience that can happen and also desktop apps for some amount of time this was true. But I think iOS apps, in particular really great ones, have super high fidelity interactions. And so you're like, you're looking at a list view, and then you click on the cell for that list view. And there's this animated transition where the title floats up to the top and grows just a little bit. And the icon that was in the corner moves up to the corner, and it gets a little bigger. And it's this animated transition to the detailed view for that item. And then if you go back, it sort of deanimates back down. And that very consistent experience is kind of lovely when you get it right, but it's really, really hard. And people, I think, have tried to bring that to the web, but it's been such a struggle. And it necessitates client-side routing and some other things, or it's probably easiest to do if you have those sorts of technologies at play, but it's been a struggle. I can't think of an application that I think really pulls that off. And I think the trade-offs have been very costly. On the one positive note, there was a tweet that I saw by Sarah Drasner that was talking about smooth and simple page transitions with the shared element transition API. So this is a new API that I think is hoping to bring some of this functionality to the web platform natively so that web applications can provide that higher fidelity experience. Exactly how it'll work whether or not it requires embracing more of the single-page application, client-side routing, et cetera, I'm not sure on that. But it is a glimmer of hope because I think this is one of the things that drives folks in this direction. And if we have a better answer to it, then maybe we can start to rethink the conversation. STEPH: So I think you just said shared element transitions. I don't know what that is. Can you talk more about that? CHRIS: I can try, or I can make a guess. So my understanding is that would be that sort of experience where you have a version of a certain piece of content on the page. And then, as you transition to a new page, that piece of content is still represented on the new page, but perhaps the font size is larger, or it's expanded, or the box around it has grown or something like that. And so on mobile, you'll often see that animate change. On the web, you'll often see the one page is just completely replaced with the other. And so it's a way to have continuity between, say, a detailed view, and then when you click on an item in it, that item sort of grows to become the new page. And now you're on the detail page from the list page prior. There's actually a functionality in Svelte natively for this, which is really fancy; it's called crossfade. And so it allows you to say, "This item in the component hierarchy in the first state of the application is the same as this item in the second state of the application." And then, Svelte will take care of transitioning any of the properties that are necessary between those two. So if you have a small circle that is green, and then in the next state of the application, it's a blue rectangle, it will interpolate between those two colors. It will interpolate the shape and grow and expand it. It will float it to its new location. There is a really great version of it in the Svelte tutorial showing a to-do list. And so it's got a list on the left, which is undone things, and a list on the right that is done things. And when you click on something to complete it, it will animate it, sort of fly across to the other list. And if you click on it to uncomplete, it will animate it and fly back. And what's great is within Svelte because they have this crossfade as a native idea; all you need to say is like, "It was on this list, now it's on this list." And as long as it's identifiable, Svelte handles that crossfade and all the animations. So it's that kind of high-fidelity experience that I think we want. And that leads us to somewhat more complex applications, and I totally get that. I want those experiences as well. But I want to ask some questions, and I want to do away with the phrasing single-page application entirely. I don't want to say that anymore. I want to say URLs are one honking good idea. Let's have more of those. And also, just to name it, Inertia is a framework that allows me to build using some of the newer technologies but not have to give up on URLs, give up on server-side logic as the primary thing. So I will continue to shout my deep affection for Inertia in this moment once again. STEPH: Cool. Thanks. That was really helpful. That does sound really neat. So in the ideal world, we have URLs. We also have high fidelity and cool interactions and transitions on our pages. We don't have to give it a fancy name like single-page application or then multi-page application. I do wonder, with our grumpiness or our complaint about the URLs, is that fair to call it grumpy? CHRIS: It's fair to call it grumpy, although you don't need to loop yourself in with me. I'm the grump today. STEPH: [laughs] CHRIS: You're welcome to come along for the ride if you'd like. And I'm trying to find a positive way to talk about it. But yeah, it's my grumpytude. STEPH: Well, I do feel similarly where I really value URLs, and I value the ability to bookmark and share, like you said earlier. And I do wonder if there is a way to still have that even if we don't have the URL. So one of the things that I do is I'll inspect the source code. And if I can find an ID that's for a particular header or section on the page, then I will link someone to a section of that page by then adding the ID into the URL, and that works. It's not always great because then I have to rely on that being there. But it's a fix, it's a workaround. So I wonder if we could still have something like that, that as people are building content that can't be bookmarked or the URL doesn't change explicitly, or reference that content, to add more thoughtful bookmark links, essentially, or add an ID and then add a user-facing link that says, "Hey, if you want to link someone to this content, here you go." And under the hood, it's just an ID. But most people aren't going to know how to do that, so then you're helping people be able to reference content because we're used to URLs, so just thinking outside the box. I wonder if there are ways that we can still bookmark this content, share it with people. But it's okay if the URL isn't the only way that we can bookmark or reference that content. CHRIS: It's interesting that you bring that up, so the anchor being the thing after the hash symbol in the URL. I actually use that a ton as well. I think I built a Chrome extension a while back to try what you're saying of I'll inspect the DOM. I did that enough times that I was like, what if the DOM were to just tell me if there were an ID here and I could click on a thing? Some people's blogs...I think the thoughtbot blog has this at this point. All headers are clickable. So they are hyperlinks that append that anchor to the URL. So I wouldn't want to take that and use that functionality as our way to get back to URLs that are addressing resources because that's a way to then navigate even further, which I absolutely love, to a portion of the page. So thinking of Wikipedia, you're on an article, but it's a nice, long article. So you go down to the section, which is a third of the way down the page. And it's, again, a very big page, so you can link directly to that. And when someone opens that in their browser, the browsers know how to do this because it's part of the web platform, and it's wonderful. So we've got domains, we've got paths, we've got anchors, we've got query params. I want to use them all. I want to embrace them. I want that to be top of mind. I want to really think about it and care about that as part of the interface to the application, even though most users like you said, are not thinking about the shape of a URL. But that addressability of content is a thing that even if people aren't thinking of it as a primary concern, I think they know it when they...it's one of those like, yeah, no, that app's great because I can bookmark anything, and I can get to anything, and I can share stuff with people. And I do like the idea of making the ID-driven anchor deep links into a page more accessible to people because you and I would go into the DOM and slice it out. Your average web user may not be doing that, or that's much impossible to do on mobile, so yes, but only more so in my mind. [laughs] I don't want to take anchors and make them the way we do this. I want to just have all the URL stuff, please. Mid-roll Ad Now we're going to take a quick break to tell you about today's sponsor, Orbit. Orbit is mission control for community builders. Orbit offers data analytics, reporting, and insights across all the places your community exists in a single location. Orbit's origins are in the open-source and developer relations communities. And that continues today with an active open-source culture in an accessible and documented API. With thousands of communities currently relying on Orbit, they are rapidly growing their engineering team. The company is entirely remote-first with team members around the world. You can work from home, from an Orbit outpost in San Francisco or Paris, or find yourself a coworking spot in your city. The tech stack of the main orbit app is Ruby on Rails with JavaScript on the front end. If you're looking for your next role with an empathetic product-driven team that prides itself on work-life balance, professional development, and giving back to the larger community, then consider checking out the Orbit careers page for more information. Bonus points if working in a Ruby codebase with a Ruby-oriented team gives you a lot of joy. Find out more at orbit.love/weloveruby. STEPH: I have a confession from earlier when you were talking about the examples for those transitions. And you were describing where you take an action, and then the page does a certain motion to let you know that new content is coming onto the page and the old content is fading away. And I was like, oh, like a page reload? We're just reimplementing a page reload? [laughs] That's what we have? CHRIS: You have a fancy, though. STEPH: Fancy, okay. [laughs] But that felt a little sassy. And then you provided the other really great example with the to-do list. So what are some good examples of a SPA? Do you have any in mind? I think there are some use cases where...so Google Maps, that's the one that comes to mind for me where URLs feel less important. Are there other applications that fit that mold in your mind? CHRIS: Well, so again, it's sort of getting at the nomenclature, and how much does the acronym actually inform what we're thinking about? But taking Google Maps as an example, or Trello is a pretty canonical one in my mind, most people say those are single-page applications. And they are probably in terms of what the tech actually is, but there are other pages in those apps. There's a settings page, and there's a search page, and there's this and that. And there's like the board list in Trello. And so when we think about Trello, there is the board view where you're seeing the lists, and you can move cards, and you can drag and drop and do all the fancy stuff. That is a very rich client-side application that happens to be one page of the Trello web app and that one being higher fidelity, that one being more stateful. Stateful is probably the thing that I would care about more than anything. And so for that page, I would be fine with the portion of the JavaScript that comes down to the client being a larger payload, being more complex, and probably having some client-side state management for that. But fundamentally, I would not want to implement those as a true client-side application, as a true SPA. And I think client-side routing is really the definition point for me on this. So with Trello, I would probably build that as an Inertia-type application. But that one page, the board page, I'd be like, yeah, sorry, this is not going to be the normal Inertia thing. I'm going to have to be hitting JSON endpoints that are specifically built for this page. I'm going to have a Redux store that's local. I'm going to lean into all of that complex state management and do that within the client-side app but not use client-side routing for actual page-level transitions, the same being true for Google Maps. The page where you're looking at the map, and you can do all sorts of stuff, that's a big application. But it is one page within the broader website, if you will. And so, I still wouldn't want client-side routing if I can avoid it because I think that is where I run into the most problems. And that thing I was talking about where I was on the login page for a second, and then I wasn't; I do not like that thing. So if I can avoid that thing, which I have now found a way to avoid it, and I don't feel like I'm trading off on that, I feel like it's just a better experience but still reserving the right to this part of the application is so complex. This is our Wiziwig drag and drop graphical editor thing, cool. That's going to have Redux. That's going to have client-side state management, all that stuff. But at no point does single-page application feel like the right way to describe the thing that we're building because I still want to think about it as holistically part of the full web app. Like the Trello board view is part of the Trello web app. And I want it all to feel the same and move around the same. STEPH: Yeah, that makes sense. And it's funny, as you were mentioning this, I pulled up Google Maps because I definitely only interact with that heavy JavaScript portion, same for Trello. And I wasn't even thinking about the fact that there are settings. By the way, Google Maps does a lot. I don't use hardly any of this. But you make a great point. There's a lot here that still doesn't need such heavy JavaScript interaction and doesn't really fit that mold of where it needs to be a single-page app or even needs to have that amount of interactivity. And frankly, you may want URLs to be able to go specifically to these pages. CHRIS: That actually is an interesting, perhaps counterpoint to what I'm saying. So if you do have that complex part of one of your applications and you still want URL addressability, maybe you need client-side routing, and so that becomes a really difficult thing to answer in my mind. And I don't necessarily have a great answer for that. I'm also preemptively preparing myself for anyone on the internet that's listening to this and loves the idea of single-page applications and feels like I'm just building a straw man here, and none of what I'm saying is actually real and whatnot. And although I try to...I think we generally try and stay in the positive space of like what's good on the internet. This is a rare case where I'm like, these are things that are not great. And so I think in this particular case, leaning into things that I don't like is the way to properly capture this. And giant JavaScript bundles where the entirety of the application logic comes down in 15-megabyte download, even if you're on 3G on a train; I don't like that. I don't like if we have flashes of a layout that they can get ripped away b; it'secause it turns out we actually aren't authorized to view that page, that sort of thing. So there are certain experiences from an end client perspective that I really don't like, and that's mostly what I take issue with. Oh, also, I care deeply about URLs, and if you don't use the URL, then I'm going to be sad. Those are my things. Hopefully, that list is perhaps a better summary of it than like...I don't want it to seem like I'm just coming after SPA as a phrase or a way of thinking because that's not as real of a conversation. But those particular things that I just highlighted don't feel great. And so I would rather build applications that don't have those going on. And so if there's a way to do that that still fits any other mold or is called whatever, but largely what I see called an SPA often has those sorts of edge cases. And I do not like those edge cases. STEPH: Yeah, I like how you're breaking it down where it's less of this whole thing like I can't get on board with any of it. You are focusing on the things that you do have concerns with. So there can be just more interesting, productive conversations around those concerns versus someone feels like they have to defend their view of the world. I have found that I think I'm a bit unique in this area where when people have a really differing opinion than mine, that gets me really excited because then I want to know. Because if I believe very strongly in something and I just think this is the way and then someone very strongly says like, "No, that's not," I'm like, "Oh yeah. Okay, we should talk because I'm interested in why you would have such a different opinion than mine." And so, I typically find those conversations really interesting. As long as everybody's coming forward to be productive and kind, then I really enjoy those conversations. CHRIS: That is, I think, an interesting frame that you have there. But I think I'm similar, and hopefully, my reframing there puts it in the way that can be a productive conversation starter as opposed to a person griping on a podcast. But with that said, that's probably enough of me griping on a podcast. [chuckles] So what's up in your world, Steph? STEPH: Oh, there are a couple of things going on. So I am in that pre-vacation chaotic zone where I'm just trying to get everything done. And I heard someone refer to it recently as going into a superman or superwoman mode where you're just trying to do all the things before you go, which is totally unreasonable. So that has been interesting. And the name of the game this week has been delegate, delegate, delegate, and it seems to be going fairly well. [chuckles] So I'm very excited for the downtime that I'm about to have. And some other news, some personal news, Utah, my dog, turns one. I'm very excited. I'm pretty sure we'll have a dog birthday party and everything. It's going to be a thing. I'll share pictures on Twitter, I promise. CHRIS: So he's basically out of the puppy phase then. STEPH: Yeah, the definition for being a puppy seems to be if you're a year or younger, so he will not be an adult. Teenager? I don't know. [laughs] CHRIS: What about according to your lived experience? STEPH: He has calmed down a good bit. CHRIS: Okay, that's good. STEPH: He has gotten so much better. Back when we first got him, I swear I couldn't get 15 minutes of focus where he just needed all the attention. Or it was either constant playtime, or I had to put him in his kennel since we're using that. That was the only way I was really ever getting maker's time. And now he will just lounge on the couch for like an hour or two at a time. It's glorious. And so he has definitely calmed down, and he is maturing, becoming such a big boy. CHRIS: Well, that is wonderful. Astute listeners, if you go back to previous episodes over the past year, you can certainly find little bits of Utah sprinkled throughout, subtle sounds in the background. STEPH: He is definitely an important part of the show. And in some other news, I have a question for you. I'm in need of some consulting help, and I would love to run something by you and get your thoughts. So specifically, the project that I'm working on, we are always in a state where there's too much to do. And even though we have a fairly large team, I want to say there's probably somewhere between 7 and 10 of us. And so, even though we have a fairly...for thoughtbot, that's a large team to have on one project. So even though there's a fair number of us, there's always too much to do. Everything always feels like it's urgent. I can't remember if I've told you this or not, but in fact, we had so many tickets marked as high priority that we had to introduce another status to then indicate they're really, really high, and that is called Picante. [chuckles] CHRIS: Well, the first part of that is complicated; the actual word that you chose, though, fantastic. STEPH: I think that was CTO Joe Ferris. I think he's the one that came up with Picante. So that's a thing that we have, and that really represents like, the app is down. So something major is happening. That's like a PagerDuty alert when we get to that status where people can't access a page or access the application. So there's always a lot to juggle, and it feels a lot like priority whiplash in terms that you are working on something that is important, but then you suddenly get dragged away to something else. And then you have to build context on it and get that done. And then you go back to the thing that you're working on. And that's a really draining experience to constantly be in that mode where you're having to pivot from one type of work to the other. And so my question to you (And I'll be happy to fill in some details and answer questions.) is how do you calm things down? When you're in that state where everything feels so urgent and busy, and there's too much to do, how do you start to chip away at calming things down where then you feel like you're in a good state of making progress versus you feel like you're just always putting out fires or adding a band-aid to something? Yeah, that's where I'm at. What thoughts might you have, or what questions do you have? CHRIS: Cool. I'm glad you brought an easy question that I can just very quickly answer, and we'll just run with that. It is frankly...what you're describing is a nuanced outcome of any number of possible inputs. And frankly, some of them may just be like; this is just the nature of the thing. Like, we could talk about adding more people to the project, but the mythical man-month and that idea that you can't just throw additional humans at the work and suddenly have that makes sense because now you have to coordinate between those humans. And there's that wonderful image of two people; there's one line of communication. Three people, suddenly there are a lot more lines of communication. Four people, wow. The exponential increase as you add new people to a network graph, that whole idea. And so I think one of the first questions I would ask is, and again, this is probably not either/or. But if you would try and categorize it, is it just a question of there's just a ton of work to do and we're just not getting it done as quickly as we would want? Or is it that things are broken, that we're having to fix things, that there are constant tweaks and updates, that the system doesn't support the types of changes that we want, so any little thing that we want to do actually takes longer? Is it the system resisting, or is it just that there's too much to do? If you were to try and put it into one camp or the other. STEPH: It is both, my friend. It is both of those camps. [chuckles] CHRIS: Cool. That makes it way easier. STEPH: Totally. [laughs] To add some more context to that, it is both where the system is resistant to change. So we are trying to make improvements as we go but then also being respectful of the fact if it is something that we need to move quickly on, it doesn't feel great where you never really get to go back and address the system in a way that feels like it's going to help you later. But then, frankly, it's one of those tools that we can use. So if we are in the state where there's too much to do, and the system is resisting us, we can continue to punt on that, and we can address things as we go. But then, at some point, as we keep having work that has slowed down because we haven't addressed the underlying issues, then we can start to have that conversation around okay; we've done this twice now. This is the third time that this is going to take a lot longer than it should because we haven't really fixed this. Now we should talk about slowing things down so we can address this underlying issue first and then, from now on, pay the tax upfront. So from now on, it's going to be easier, but then we pay that tax now. So it is a helpful tool. It's something that we can essentially defer that tax to a later point. But then we just have to have those conversations later on when things are painful. Or it often leads to scope creep is another way that that creeps up. So we take on a ticket that we think, okay, this is fairly straightforward; I don't think there's too much here. But then we're suddenly getting into the codebase, and we realize, oh, this is a lot more work. And suddenly, a ticket will become an epic, and you really have one ticket that's spiraled or grown into five or six tickets. And then suddenly, you have a person that's really leading like a mini project in terms of the scope of the work that they are doing. So then that manifests in some interesting ways where then you have the person that feels a bit like a silo because they are the ones that are making all these big changes and working on this mini-project. And then there's the other one where there's a lot to do. There are a lot of customers, and there's a lot of customization for these customers. So then there are folks that are working really hard to keep the customers happy to give them what they need. And that's where we have too much to do. And we're prioritizing aggressively and trying to make sure that we're always working on the top priority. So like you said, it's super easy stuff. CHRIS: Yeah. To say it sincerely and realistically, you're just playing the game on hard mode right now. I don't think there is any singular or even multiple easy answers to this. I think one question I would have particularly as you started to talk about that, there are multiple customers each with individualized needs, so that's one of many surface areas that I might look t say, "Can we sort of choke things off there?" So I've often been in organizations where there is this constant cycle of the sales team is going out. They're demoing against an InVision mock. They're selling things that don't exist. They're making promises that are ungrounded and, frankly, technically infeasible or incredibly complicated, but it's part of the deal. They just sold it, and now we have to implement it as a team. I've been on teams where that was just a continuing theme. And so the engineering team was just like, "We can never catch up because the goalpost just keeps moving." And so to whatever degree that might be true in this case, if there are ten different customers and each of them right now feels like they have an open line to make feature requests or other things like that, I would try to have the conversation of like, we've got to cut that off right now because we're struggling. We're not making the forward progress that we need to, and so we need to buy ourselves some time. And so that's one area that I would look at. Another would be scope, anywhere that you can, go into an aggressive scope cutting mode. And so things like, well, we could build our own modal dialogue for this, but we could also use alert just like the JavaScript alert API. And what are all of the versions of that where we can say, "This is not going to be as nice, and as refined, and as fitting with the brand and feel and polish of the website. But ways that we can make an application that will be robust, that will work well on all of the devices that our users might be using but saves us a bunch of development time"? That's definitely something that I would look to. What you described about refactoring is interesting. So I agree with we're not in a position where we can just gently refactor as we find any little mess. We have to be somewhat ruthless in our prioritization there. But like you said, when you get to that third time that a thing is working way harder, then take the time to do it. But really, like just every facet of the work, you just have to be a little better. If you're an individual developer and you're feeling stuck, raise your hand all the earlier because that being stuck, we don't have spare cycles right now. We need everybody to be working at maximum efficiency. And so if you've hit a wall, then raise your hand and grab somebody else, get a pair, rubber duck, whatever it is that will help you get unstuck. Because we're in a position where we need everybody moving as fast as they can. But also to say all of those aren't free. Every one of those where you're just like, yeah, do it the best you can. Dial it up to 11 on every front. That's going to drain the team, and so we have to also be mindful of that. This can't be forever. And so maybe it is bringing some new people onto the team or trying to restructure things so that we can have smaller communication channels. So it's only four people working together on this portion of the application, and therefore their communication lines are a bit simpler. That's one way that we can maybe save a little bit. But yeah, none of these are free. And so, we also need to be mindful that we can't just try harder forever. [laughs] That's a way to burn out the team. But what you're describing is like the perfect storm of every facet of this is difficult, and there's no singular answer. There's the theory of constraints (I think I'm saying that right.) where it's like, what's the part of our process that is introducing the most slowdowns? And so you go, and you tackle that. So if you imagine a website and the app is slow is the report that you're getting, and you're like, okay, what does that mean? And you instrument it, and you log some stuff out. And you're like, all right, turns out we have tons of N+1s. So frankly, everything else doesn't matter. I don't care if we've got a 3 megabyte JavaScript bundle right now; the 45 N+1s on the dashboard that's the thing that we need to tackle. So you start, and you focus on that. And now you've removed that constraint. And suddenly, the three megabyte JavaScript bundle is the new thing that is the most complicated. So you're like, okay, cool, let's look into tree shaking or whatever it is, but you move from one focus to another. And so that's another thing that could come to play here is like, which part of this is introducing the most pain? Is it feature churn? Is it unrealistic sales expectations? Is it developers getting stuck? And find the first of those and tackle it. But yeah, this is hard. STEPH: Yeah, it is. That's all really helpful, though. And then, I can share some of the things that we are experimenting with right now and then provide an update on how it's going. And one of the things that we're trying; I think it's similar to the theory of constraints. I'm not familiar with that, but based on the way you described it, I think they're related. One of the things that we are trying is breaking the group into smaller teams because there are between 7 and 10 of us. And so, trying to jump from one issue to the next you may have to really level up on different portions of the application to be able to make an impact. And there are areas that we really need infrastructure improvements and then essentially paving the way for other people to be able to move more quickly. We do have to prioritize some of that work as well. So if we break up into smaller teams, it addresses a couple of areas, or at least that's the goal is to address a couple of areas. One is we avoid having silos so that people aren't a bottleneck, or they're the only ones that are really running this mini-project and the only one that has context. Because then when that person realizes the scope has grown, bringing somebody on to help feels painful because then you're in an urgent state, but now you have to spend time leveling someone else up just so that they can help you, and that's tough. So the goal is that by having smaller teams, we will reduce that from happening because at least everything that feels like a small project...and by feels like a small project, I mean if we have more than one ticket that's associated with the same theme, that's going to start hinting at maybe this is more than just one ticket itself, and it might actually belong to an epic. Or there's a theme here, and maybe we should have two people working on this. And breaking people into groups, then we can focus on some people are focused more on the day-to-day activity. Some people are focused on another important portion of the codebase as we have what may be extracted. I'm going to say this, but we're going to move on, maybe extracted into its own service. [laughs] I know that's a hot one for us, so I'm just going to say it. CHRIS: I told you I can't be nerd sniped. This is fine. Let's continue on. [laughs] STEPH: [laughs] And then a small group can also focus on some of those infrastructure improvements that I was alluding to. So smaller teams is something that we are trying. We are also doing a really great job. I've been really happy and just proud of the team where folks are constantly reaching out to each other to say, "Hey, I'm done with my ticket. Who can I help?" So instead of immediately going to the backlog and grabbing the next thing. Because we recognize that because of this structure where some people are some silos, they have their own little mini backlog, which we are working to remove that to make sure everything is properly prioritized instead of getting assigned to one particular person. But we are reaching out to each other to say, "Hey, what can I do to help? What do you need to get done with your work before I go pick something else up?" The other two things that come to mind is who's setting the deadlines? I think you touched on this one as well. It's just understanding why is it urgent? Does it need to be urgent? What is the deadline? Is this something that internally we are driving? Is this something that was communicated without talking to the rest of the team? Is this just a really demanding customer? Are they setting unrealistic expectations? But having more communication around what is the sense of urgency? What happens if we miss this deadline? What happens if we don't get to this for a week, a month? What does that look like? And then also, my favorite are retros because then we can vote on what feels like the highest priority in terms of pain points or run these types of experiments like the smaller teams. So those are the current strategies that we have. And I'm very interested to see how they turn out because it is a tough way. Like you said, it's challenge mode, and it is going to burn people out. And it does make people feel fatigued when they have to jump from one priority to the next. So I'm very interested. It's a very interesting problem to me too. It just feels like something that I imagine a lot of teams may be facing. So I'm really excited if anybody else is facing a similar issue or has gone through a similar challenge mode; I'd love to hear how your team tackled it. CHRIS: Yeah, I'm super interested to hear the outcome of those experiments. As a slightly pointed question there, is there any semi-formal version of tracking the experiments? And is it just retro to retro that you're using for feedback on that? I've often been on teams where we have retro. We come up with it, and we're like, oh, this is a pain point. All right, let's try this. And then two weeks later, we're like, oh, did anyone actually do that? And then we just forget. And it's one of those things that I've tried to come up with better ways to actually manage, make slightly more explicit the experiments, and then have a timeline, have an almost scientific process of what's the hypothesis? What's the procedure? What are the results? Write up an executive summary. How'd it go? STEPH: We are currently using retro, but I like that idea of having something that's a bit more concrete. So we have action items. And typically, going through retro, I tend to revisit the action items first as a way to kick off retro. So then that highlights what did we do? What did we not do? What do we not want to do anymore? What needs to roll over to the current iteration? And I think that could be just a way that we chat about this. We try something new, and we see how it's going each week in retro. But I do like the idea of stating upfront this is what we're looking to achieve because I think that's not captured in the retro action item. We have the thing that we're doing, but we haven't captured this is what we hope to achieve by taking this experiment on. Mid-roll Ad And now a quick break to hear from today's sponsor, Scout APM. Scout APM is leading-edge application performance monitoring that's designed to help Rails developers quickly find and fix performance issues without having to deal with the headache or overhead of enterprise platform feature bloat. With a developer-centric UI and tracing logic that ties bottlenecks to source code, you can quickly pinpoint and resolve those performance abnormalities like N+1 queries, slow database queries, memory bloat, and much more. Scout's real-time alerting and weekly digest emails let you rest easy knowing Scout's on watch and resolving performance issues before your customers ever see them. Scout has also launched its new error monitoring feature add-on for Python applications. Now you can connect your error reporting and application monitoring data on one platform. See for yourself why developers call Scout their best friend and try our error monitoring and APM free for 14 days; no credit card needed. And as an added-on bonus for Bike Shed listeners, Scout will donate $5 to the open-source project of your choice when you deploy. Learn more at scoutapm.com/bikeshed. That's scoutapm.com/bikeshed. STEPH: As for the other thing that you mentioned, I do have an idea for that because a former client that I worked with where we had experiments or things that we wanted to do, we were using Trello. And so we would often take those action items…or it was even more of a theme. It wasn't something that could be one-and-done. It was more of a daily reminder of, hey; we are trying this new thing. And so, we want to remind you each day to embrace this experiment and this practice. And so we would turn it into a Trello ticket, and then we would just leave it at the top of the board. So then, each day, as we were walking the board, it was a nice reminder to be like, hey, this is an ongoing experiment. Don't forget to do this. CHRIS: I do like the idea of bringing it into a stand-up potentially as like that's just a recurring point that we all have. So we can sort of revisit it, keep it top of mind, and discard it at some point if it's not useful. And if we're saying we're doing a thing, then let's do the thing and see how it goes. So yeah, very interested to hear the outcomes of the experiment and also the meta experiment framework that you're going to build here. Very interested to hear more about that. And just to say it again, this sounds like your perfect storm is not quite right because it doesn't sound like there's a ton of organizational dysfunction here. It sounds like this is just like, nah, it's hard. The code's not in perfect shape, but no code is. And there's just a lot of work to be done. And there are priorities because frankly, sometimes in the world, there are priorities, and you're sort of at the intersection of that. And I've been in plenty of teams where it was hard because of humans. In fact, that's often the reason of we're sort of making up problems, or we're poorly communicating or things like that. But it sounds like you're in the like, nope, this is just hard. And so, in a way, it sounds like you're thinking about it like, I don't know, it's kind of the challenge that I signed up for. Like, if we can win this, then there's going to be some good learnings that come out of that, and we're going to be all the better. And so, I wish you all the best of luck on that and would love to hear more about it in the future. STEPH: Thank you. And yeah, it has been such an interesting project with so many different challenges. And as you've mentioned, that is one area that is going really well where the people are wonderful. Everybody is doing their best and working hard. So that is not one of the competing challenges. And it is one of those; it's hard. There are a lot of external factors that are influencing the priority of our work. And then also, some external areas that we don't have control over that are forcing some of those deadlines where customers need something and not because they're being fussy, but they are themselves reacting to external deadlines that they don't have control over. So it is one of those where the people are great, and the challenges are just real, and we're working through them together. But it's also hard. But it's helpful chatting through all the different challenges with you. So I appreciate all of your thoughts on the matter. And I'll report some updates once I have some more information. On that note, shall we wrap up? CHRIS: Let's wrap up. STEPH: The show notes for this episode can be found at bikeshed.fm. CHRIS: This show is produced and edited by Mandy Moore. STEPH: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or a review in iTunes as it helps other people find the show. CHRIS: If you have any feedback for this or any of our other episodes, you can reach us at @_bikeshed on Twitter. And I'm @christoomey. STEPH: And I'm @SViccari. CHRIS: Or you can email us at hosts@bikeshed.fm. STEPH: 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.
The big "Three Oh Oh!" What a milestone for this podcast! Aside from celebrating that the show has made it this far, Chris gives some followup on some Inertia.js issues he had been having, and talks about open source licenses and legality and testing against external APIs. Steph has thoughts on mozzarella sticks and what makes good ones; particularly the cheese to bread ratio... They then, together, answer a listener question re: knowledge silos: Jan asked, "Our team (3 pairs) is currently working on two different projects due to that fact we are creating information silos. Now we are looking into ways how we can minimize those information silos. Do you have any ideas how we could achieve this?" With switching pairs they are unsure about it as it can be difficult for new pairs to get up to speed. inertia-rails thread safety (https://github.com/inertiajs/inertia-rails/pull/70) Rails Cache-Control no-store fix (https://github.com/rails/rails/pull/40324) Transcript: STEPH: I have no shame. CHRIS: That's important in this industry. STEPH: [laughs] Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Steph Viccari. CHRIS: And I'm Chris Toomey. STEPH: And together, we're here to share a bit of what we learned along the way. Hey, Chris. So today's an exciting day. It's a rather momentous day, at least in my world, because today is our 300th episode. CHRIS: 300? That is incredible. STEPH: That's an incredible amount of episodes. And it made me pause and reflect on how many episodes I have been a part of. And I've realized it's over 100. I think it's around 104 or something like that, and I can't believe it. Time flies when you're behind the mic. CHRIS: Time does fly, yeah. So yeah, fully a third of these you've been involved in. I don't know what the number is. And I'm just so grateful to Derek Prior and Sage Griffin, who started this whole process. And then to Thom Obarski, who was the producer for so long, and Mandy Moore, who recently joined us and has been doing a wonderful job of carrying that forward and to you, Steph, because this has just been such a joy to work on. Yeah, it's just a joy to be on the show and to get to chat with you each week and share some things. And frankly, learn from folks writing in questions and sharing pointers with us, and it really is such a delight. And yeah, 300 is pretty momentous. STEPH: The listener questions and feedback have undoubtedly been a highlight for me. That is one of the areas that I love the most. I love the questions. I also love when people provide helpful answers to us, and then they help us out in return and also, all the incredible guests that we've had on the show. It has been phenomenal. I'm also very thankful to have been part of this journey and appreciate everyone that has got us here today. I wonder what the fourth iteration of The Bike Shed looks like. I consider this the third iteration because the first iteration was Sage Griffin and Derek Prior. The second iteration was where you took over The Bike Shed, and then you were hosting a number of incredible guests on the show. And then the third iteration is the iteration that we're living, so I wonder what the fourth will look like. CHRIS: Oh, that is an interesting question. Hopefully, you and I get to hang out for a good bit longer. But at some point, much like the Green Lantern, this will get passed on, and someone else will take up the mantle and tell some stories. But, yeah, hopefully, that's not too soon because I certainly enjoy hanging out with you. STEPH: Oh, I agree. I certainly enjoy this, and I'm in no rush to leave The Bike Shed. But I think it's just fun thinking about the next people that will carry this journey forward. CHRIS: And determine the color of The Shed. STEPH: And determine. I mean, that is their right. As host and co-host, they get to determine the color of The Shed. CHRIS: 300 episodes in, and we still haven't figured it out. So I guess we got to keep trying. STEPH: Oh, I have. I already know what color it is. CHRIS: Is it yellow? STEPH: It's yellow. CHRIS: Yeah. Okay. [laughs] STEPH: I like how we said yellow at the same time, you know. [laughs] CHRIS: I do, although I feel like it's wrong to have a color in mind, or at least I want to dig in and talk about it for a while just to be in keeping with the show, but... STEPH: One must first argue before deciding and then argue again. But to not continue bikeshedding on The Bike Shed, what's new in your world? CHRIS: My week has been good. Actually, I have two quick updates on various Inertia things that I've shared in previous weeks. So we can include a show notes link for the two different episodes where I talked about these respective things. But there was one weird issue that I ran into with Inertia where it could start clicking a button that would delete, was behaving weirdly and occasionally, intermittently; some of the responses would end up as a full HTML page response as opposed to the expected Inertia response. And there's a bunch of subtlety around this. I actually reported it as an issue to the Inertia team. And they very kindly pointed me to the HTTP semantics at place. So it's the difference between a 302 redirect and a 303 redirect. And so, in their code, they were correctly doing a 303. They were standards-compliant; everything was great. But for some reason, it was still misbehaving sort of randomly, and I could never pin it down. I ended up working around it and opting out of Inertia behavior for those endpoints. But my assumption was that something in my Rails Middleware Stack was behaving weirdly and occasionally overriding Inertia Rails' setting of the status. So Inertia Rails was saying, "303," which is a special version of redirect, and something else in the Rails Middleware Stack, was saying, "302, it will be fine." Turns out, in retrospect, the Inertia Rails team has discovered that this was, in fact, a threading bug on their side. So it's not Inertia's fault. Inertia as a core concept and as a protocol was definitely doing the right thing. And the Inertia-Rails Middleware was attempting to do the right thing. But threads and concurrency got in the way, which I'll be honest, I don't deeply understand those concepts. So I was just like, oh okay, that sounds like a thing that could go wrong occasionally, which is exactly how I experienced it. But now they've made an update to the project, so that should be resolved in a deep way. But goes to show you threading and concurrency are really tricky to chase down. STEPH: I appreciate that you're coming back to give us the conclusion to that issue because I remember talking about it, and you were still going off on a journey and finding out what's wrong, so that's super interesting. And yeah, threads and concurrency those are super easy, like cache invalidation and naming, that's right up there. CHRIS: It's actually kind of funny. One of the issue threads where I wrote about it, someone followed up and asked if I'd come to any solution. And I said, "Oh, I've gone kind of this weird way, and I'm doing these things." But I shared a code sample, and I said, "Just to be clear, this is 100% about something Rails is doing and not Inertia, which remains a stellar project." And then, very shortly after that, someone from the Inertia-Rails team was like, "Ah, actually, I think it was us. Sorry about that, but we fixed it now." And I was like, "I still love you guys. This is great. You're doing a great job. [chuckles] You continue to push the envelope in a wonderful way." But it was a funny interaction where I was like, never shall I let the name be dragged through the mud. Whoops. Okay. Never mind. STEPH: You're an excellent hype man for Inertia. CHRIS: I try, I really try. I believe in it to my core. And actually, there's another one that this one's not really related to Inertia at all, although I've seen it discussed within the context of Inertia. And again, I think the Inertia team has done a really great job of responding and pointing to here are the HTTP semantics, and adhering to the standards, and the way that things should work. But this one has to do with the back button. When you're doing sequential forms or really any sort of form type thing, the browser will just pull from its back/forward cache, which is a local cache of the HTML of the page as it just had it. And I had come to the understanding that this was not something that I could workaround. This was not something that I could control. I had tried every combination of headers, at least I thought I had, in Rails to try and control this from the server-side because ideally, the server is the one who knows about when data is changing and things of that nature. The server should be able to inform the browser, "Hey, don't cache or store this page in any way, always revalidate it." It turns out there was a bug in Rails that was improperly normalizing the Cache-Control header and always removing the no-store Cache-Control value. So there are like five different or a handful of possible values that can be set for that header for the Cache-Control header. And Rails has a bunch of internal logic that says, "Okay, if you've set this, then I'll put these two, but not that one." And they're just trying to manage it and do nice things on our behalf. But unfortunately, they were being a little overzealous in that normalization effort. And so they were dropping an important value, which is no-store. So now there's a PR opened in Rails, or I think it's actually been merged in at this point that will fix that and allow you to set that particular header value, which then should get the behavior of "Hey, browser, if I hit the back button, please go ask the server. Don't trust your local cache, “which is exactly what I want. STEPH: Interesting. Wow. So that's two very helpful resolutions to some of those strange issues you were running into before. CHRIS: Yeah, definitely. And actually, for that issue, in particular, it was a very kind Bike Shed listener; Alexei Vasiliev wrote in and shared some initial thoughts, pointed me in the direction of some things. In that case, I actually was like, "I don't think that's the case. I tried it." And he was like, "No, no, no, pretty sure." And he was definitely correct in this case and was very kind and gave me an example of code reproduction and all of those nice things. So I was able to chase this down and then eventually find the issue in Rails, which had been opened like eight days before. So I think for me, I just happened to run into a weird period of time where Rails was subtly broken around this behavior. And therefore, I determined that the world was broken when, in fact, it was just a tiny slice of Rails' history. But yes, thank you so much, Alexei, for writing in and pointing me in the right direction on that. STEPH: The dream came true. We talk about some of our troubles and our strifes, and people respond and help us out. CHRIS: That is the dream. But yeah, so those are some quick updates, not really about me, although tangentially, I got to go along for these rides, and it was fun. But what else is up in your world? STEPH: Let's see. Well, I also have a small update that I can share. It's circling back to the conversation that we had talking about extracting an untrustworthy service to a new location. And at that time, I don't remember exactly the process I laid out. But at that time, it's the idea that it is a bit untrustworthy, but we have some security in how this process works, and it is ideal that we move it to this other location. So let's just go ahead and move it wholesale, bugs and all to the new location. And then there, we will start to refine, and we'll start to improve the service. Well, the update is that we have realized that the untrustworthy service is untrustworthy enough that I'm actually working on improving it in its current place just to a certain extent that then it feels like we can move it to another location. There have been enough issues with it that it has taken my focus to continue patching those bugs and making sure everything is working appropriately. But now I'm in the space of where I'm like, goodness, I thought I knew this thing and now I'm realizing I don't. And so, I'm looking for ways to inform myself and the team when something isn't working when we think it is. So to provide a bit of context, this service is sending a bunch of messages to other systems, and most of the time, that is working, but there are times that it's not. And when it's not working, it's silent about the fact that those messages aren't being sent, and it's very important that we send those messages. So what's been on my mind is looking for a way to then elevate myself and the team to say, "Hey, these are the number of messages that are being sent on average." And then suddenly, let's say it dropped by 50%, or maybe we typically send 98% successful messages, and we have a 2% failure rate, but suddenly we have a 50% failure rate, but looking for those metrics that I can capture and then alert the team if something is going wrong. And one of the suggestions that was bubbled up by Chad Pytel, who's a developer, he's also founder and COO of thoughtbot, and we're working on the same project together. And he had highlighted that a previous project that he worked on used AWS specifically to leverage the idea of tracking how many successful messages are being sent, or perhaps in their particular project, it was focused on how many orders were being processed. That was important to know. And in our case, we could do a similar metric where we look to see are we still sending messages? Has the number dropped significantly lately so then we can be notified, and then we can escalate that to PagerDuty? So then we notify the team that something's going on. I don't know the specific mechanics of how I'm going to implement that yet. So I will report back, but I'm excited to have something that's going to alert me for when things aren't working the way I expect versus waiting for then someone that's a customer to notice it and then get back to us. It's very in line with a number of the topics that you've brought to the show recently, talking about how we can measure more of the user's experience and be notified sooner versus waiting for a user to bump into an error and then they reach out and notify us. CHRIS: I'm super interested to hear where you get with that because that's definitely an area that I've poked at but not dug into particularly deeply. I know there are a number of projects like StatsD is one of them. I think there are others in that space, but that's where you're sending metrics just out to some service, and then you can aggregate and graph. I've also done similar things with Papertrail; I want to say, where you can do a very specific search in the logs, and then within that, you can aggregate and graph and show things over time. So you can do a very simplified version of what you're describing to sort of visualize a rate of something over time. And then I think they might have some thresholding alerts. But also, that's one of those super hard things to do because it turns out like Monday morning, a lot of emails get sent and then Friday afternoon, fewer, and then on the weekend, none. And so, there's going to be an inherent sort of fluctuation to the data. And so then what is normal? What does the baseline look like? And then how do you do anomalies around that? Because inherently, there's going to be noise in the data. And so is it a 10% band around the normal? And I'm just saying a lot of words now that I barely know the meaning of. But it's one of those things where it's like, oh yeah, just let me know if it's behaving abnormally. There's so much in that one little sentence. And it's one of the like; I love the fractal complexity of this space where every part of that sentence that I just said is like, oh, that's way more complicated than it sounds when you just say that word. So very interested to hear where you get with this. And this is also something that I'll probably be pushing on in my work in the near term. So maybe we can even compare notes, but as of now, I just have, I think, buzzword-level knowledge of it. STEPH: Well, I love that phrasing fractal complexity because yes, that was also where my brain got hung up in starting to think about this process and like, well, what's normal? I don't actually know what normal looks like because I haven't been tracking this until now. So do I go back a week and say, "Okay, let's compare our average sent rate to in the past week and try to define normal in that timeframe?" And I think the answer, for now, is to do the smallest thing but also has the biggest impact, and that's to notify the team if messages just stop. That feels like the first, small step to take, and then we can fine-tune. Do we want to know if suddenly successful messages are being marked as a failure? We have an increase in failed messages versus successful messages. But I think the first iteration is just to know or to confirm that we are sending messages and send us an alert if suddenly we're not sending messages for...ooh, I just realized there's a complexity in that statement too. It's like, how long are we not sending messages for? Is it for an hour? Is it for a day? CHRIS: I was going to ask. [laughter] STEPH: I just caught myself there. Yeah. I don't have an answer to that right now. I have to think about it, but there's an answer there. I will have to choose an answer. CHRIS: You sure will. And then you'll probably have to tweak it over time. It's also one of those topics where false negatives and false positives are really easy to fall into where the system's alerting too often. And so people then start to ignore the alerts versus it's too cautious before it will send out an alert and, therefore, you're missing things and so finding that optimum level. It also might be different days of the week. Aah. [chuckles] STEPH: Yeah, I think that's very true. It will be different for different days of the week. So I have a lot more to think about in regards to how we're going to report on this. But that still feels very much like something I want in the world because right now, it's a lot of spelunking and production consoles to find out what's going on with the data and making sure that it's going through. And that feels like the least favorable option as to the world that I want to live in. Oh, on a completely unrelated topic, I saw an article that I'm very excited to read. And it's not related to technology at all, but it looks like a very delightful article that someone wrote and titled My 14-Hour Search for the End of TGI Friday's Endless Appetizers. And I haven't read it in-depth yet, but I just read the first bit, and it seems like it's going to be delightful. But I thought of you because we've had previous outtakes around mozzarella sticks. And you were very excited when you thought thoughtbot had mozzarella sticks, the actual fried kind versus just the healthier cheese stick kind. So this seems like a thing that you'd enjoy. CHRIS: I feel like it may have even ended up in an episode, and we talked about mozzarella wedges and the ratio of surface area to volume. STEPH: Yes. CHRIS: I don't know if that made it into an episode or not, but we have definitely you and I discussed mozzarella sticks before. And I'm definitely intrigued by this article. I will add it to Instapaper immediately and then probably never read it again because Instapaper is where I put things to forget them. But maybe someday I'll sit down with a coffee and read things. STEPH: I've heard you mention Instapaper before, and I've looked into it. And I don't know why, but it just hasn't stuck for me. So I always throw anything that I want to explore or something that is also critical for me to do. I use Todoist. I don't know if you're familiar with that app, but that's my go-to. CHRIS: Well, I'm familiar with Todoist. I take a slight line between my to-do list, which I want to be as, I don't know, clean and tidy and only the things that I have to do versus for me, Instapaper is a list of when I get around to it when I've got those ten free minutes, which apparently don't exist in the world. But when I have them, this is the list of things that I can read. But I think I've heard this from a number of people of having a more integrated system that all the stuff's in the same place. I keep my to-dos in Trello, also as an aside, and I'm not super happy with that. How do you like Todoist? Is it bringing you joy? STEPH: I really like Todoist. I find it is simple enough an interface that I'm not spending a lot of time customizing it or messing around with it. I can just go there and log the things that I want. I can create individual projects and spaces as well. So if I want to separate my personal to-do list from my work to-do list or if I have a project, that's a really nice feature as well. I think my only small complaint is if I'm writing a date or if I'm writing tomorrow, Todoist will try to do the smart thing and say, "Oh, I'm going to add a due date for you since you mentioned a date." And I'm like, no, no, no, I don't want a due date. I just want to mention the specific date because somehow it's relevant. And undoing that is sometimes a little tricky. But otherwise, I have found Todoist very helpful. I'm a big fan. Also, you and I are slightly different creatures in terms of how neat and tidy we keep our spaces. I think how we both manage our email inbox is a really good indicator of this where you are more organized than I am when it comes to emails. And so, our to-do list might be similar. I'd be interested to see if Todoist fits your needs or if it doesn't offer enough structure. CHRIS: I almost certainly could make it work. And it's one of those things where I've actually settled on Trello, which is a very loose tool. And so I've been able to shape it sort of to what I want, but it doesn't really have that many true productivity-type features. It's just a loose board where I can drag around cards and move them through. And that's worked fine, or I've been able to talk myself into not trying to be as neat and tidy and intentional with my to-do list, which I think has been good overall. I've looked at Todoist in the past. And the thing that gives me pause sort of related to what you were talking about with the date things, but I get the idea, or I get the sense that Todoist really, from a fundamental philosophical approach, really wants things to have dates and to have priorities, and my thinking is not quite that. Like, there is a priority, but it's relative. So it's the order of things in a list, but it's not this is a one, and this is a two, and that's another two. I find that logic of like there are different tiers of importance doesn't really map to my world, nor do dates. Almost everything I do has no date, has no context. It's just like when I'm at the computer because that's the only place I ever am. So it's when I'm at the computer, it's all kind of important-ish. Nothing really has a date, but it should probably be done pretty soon. That sort of stuff doesn't quite map to what I see in Todoist. So I've always found a little bit of a mismatch between what I think I want and what Todoist, as far as I understand, provides. I know they added Kanban-type boards recently. So I think that might help with just visualizing workflow and being a little closer to Trello, which I'm familiar with. But I'm sort of on the search right now for another to-do list. I like what you said about being able to separate the work and personal because that's definitely a thing that I would want, although there's always the added complexity of whatever tracking tool that we're using as a team at work and which things go into my list versus that list. And do I try and synchronize them in any way? And then I do what I do, which is I start to imagine this ridiculously complex, fully integrated, bi-directional sinking nonsense system where like, never mind. Stop it. Pen and paper, Trello. I don't know; you've lost your privileges, though. This is me talking to myself. I lose my privileges much like I'm not allowed to ever try Emacs. I have had a multi-year moratorium on exploring new productivity tools, but I think maybe, just maybe, now is the time to revisit that. STEPH: If you ever disappear for a week or two, I'll know that you tried Emacs or something like that happened CHRIS: [chuckles] My beard is three times longer when I come back, and I'm like, "All right. I figured some stuff out, though." STEPH: I'm with you in regards to trying to bucket all of your to-do items as if it's a priority one, two, three. I am not good at that, and I'm always wrong. So I've also given up on that system. I would describe myself as a minimalist user. I'm using all the basic functionality. I'm not leveraging what a lot of stuff that Todoist probably can do for me. And so I have a very just flat list of things that I'd like to do. I do have a couple of projects because I do try to have that personal versus work, and maybe I have some other project that's on there as well. And then, in my mind, I try to avoid due dates unless it's really important. Although I say that if it's really important, it's going on my calendar too because I'm going to budget time for it or make sure that I don't forget it. But then each day then I go through that full list, and then I pick the things that need to be done that day or it's reasonable to get done that day, and then I kick everything to the next day. So that way, I'm always reevaluating a fresh list of what do I need to tackle? What's reasonable for today, and what can I punt on? And Josh Clayton said this to me before, and I really liked it in terms of punting on work because typically, when you're really busy, something's always going to drop. You're always going to push something to the next day. So then it's just figuring out what's going to bounce and what's going to break? So I'm always looking for what's going to break? And let's prioritize that for today to make sure it gets done. If it will bounce, then I'm going to kick it to the next day, and I can't see it until I'm going back through that full list again. CHRIS: I really like that framing around you're going to have to drop things. That's just the nature of life. There's always more to do than there is time. So will it bounce, or will it break in that? And that framing around how to decide which things get moved out. Interestingly, I just looked up because I wanted to know does Todoist support snoozing things? Which is something that I use constantly in Trello and Gmail and basically everywhere else. I'm just like, nope, future me problem, future me problem, and I just keep pushing things into the future. But critically, I want them to be hidden until that time. And it sounds like Todoist; you can set a future due date, and then it'll show up in today. But again, that's sort of conflating how I think about productivity and whatnot. Also, I found…this is a Reddit post that I'm looking at where I'm determining this. And there is the question, and then there's someone answered, but the answer is deleted. And then there's someone replying to that saying, "Wow, what a thoughtful response. Have you written this up anywhere else, like a blog post? You sound like an absolute pro." But the parent comment, which apparently was beautiful, and articulate, and well-written, has been deleted. And this is the sadness of the internet. So a really beautiful xkcd about the saddest thing you can see is you search for a question, and you find Stack Overflow from 10 years ago one person asking the question and no answers. And you've got one other person out there in the world who cares the same way you do, but you have no answers, and it's sad. But I'm just sad about the loss of information. STEPH: That's so tragic, or that's a really pro troll move. And you leave a comment, and then below, you're like, “Wow, that was amazing. That was beautiful.” And then you delete your own previous comment. So then you're just tricking people into thinking there was an answer. CHRIS: It does sound almost performative, especially the last line, "You sound like an absolute pro." So I could see that being the case. And you know what? I'm going to choose to believe that that's what it is because then I can sleep better at night. So thank you, Steph. STEPH: Happy to help. CHRIS: But I think we should probably move on to perhaps a listener question or something. But before we do that, I do want to ask if anyone out there has a to-do list that they're using and they love; I would love to hear about it. I think I'm familiar with most of them, but votes of confidence from the listeners of this show will certainly go a long way with me. Because I think you folks are all very smart people. I mean, you're listening here, so, obviously. STEPH: Yes, obviously. This very deeply intellectual show about mozzarella sticks and the ratio of cheese to fried and what's the best. CHRIS: It's an important question. STEPH: It is an important question. I have strong feelings about it. That's why we've talked about it. [chuckles] CHRIS: On this very serious show that we host. STEPH: [chuckles] Yes, we have an awesome listener question that I'm really excited to dive into. But before we do, I have a quick git thing that I'd love to share. It's a tip that Dimitry, another thoughtboter, shared with me today that I think is just really nice and something that I have not used before. And it's specific to a workflow where if you need to grab a file from another branch or from another commit, and then if you want to bring it into your current branch. And there are a couple of ways to go about it. One of them is you can do git checkout main and then pass the file presuming the file that you want is in main and then you want to bring it to your current branch. And that will copy over the file to that exact location. But if you wanted to grab a file that's on the main branch but then you want to port that file to a new location, then you can use git-show and do git show branch. So let's say you're bringing a file from main over to your current branch, so it would be git show main: and then pass to the file that you wish to copy, and then the greater than sign and the path to where you want that file to live. So you can grab that file and then stash it in a new location, and you can also do it for commits too. So if someone has pushed up a commit and you want to copy a particular file, say if you need to bring in some of their work into your branch, then you could also do git show commit, and then that colon, and then the path to the file. And then, if you wanted to move it to a new location, you can use that greater than sign and then the path to where you would like that file to live. So it's a nice combination of the git command of git show and then also shell redirection. So then, you can pipe that content from the file that you wish to copy over to the new location that you would like. And it's not something that I've reached for very often, but I find lately I've been in a mode where I'm trying harder and harder to stay within my terminal and not have to jump over to GitHub or to external UIs if I can. And so this just feels like a nice additional tool where then I can use this one more thing where I don't have to either...I guess it's small. I could check out main locally. But even with this way, I don't have to switch branches, grab something, and bring it over, or I don't have to go to GitHub and then look for something. It feels like a nice way that then I could grab that file locally and bring it over to my branch. CHRIS: That's a nice combination of tips there. Like you said, a bunch of different pieces at play, but that is definitely a super useful thing. It's one of those that I've not gotten that into muscle memory yet or even close to muscle memory. Git is complicated in terms of the interface that it provides, at least at the command line. I've been trying to make sense of it all and then trying to find what are the useful workflows that I want to build? Because you can do anything, and you can do most things in five different ways. And so finding that set that you do want to know deeply but then also getting that committed into your hands, not even into your head, is the thing that I strive for. But that particular one is one that I struggle with every single time. So especially, I think you broke that down really nicely, so it makes sense. There's a corollary in Fugitive for any Vim users out there. There's a Gread command, so it's capital G-re-a-d. And then after that, it takes some identifier, and I've never gotten the identifier right. But as you just described it, it's the same as the git show sequence. So it's a commit or a branch name, colon, and then the file path that you want. And then, in Vim, you can use % to reference the current file. So I've tried really hard to teach my brain Gread main :%, and somehow, my brain doesn't want to remember that ridiculous sequence of characters. So, only in this moment am I like, oh, it all kind of fits together. STEPH: Oh, that's nice. I am a Vim Fugitive user, but I didn't know that one. And I'm with you; I rarely remember all these off the top of my head unless I've done them like a hundred times, and it finally starts to sink in. So I always have a cheat sheet, or since we were talking about tooling earlier, I use Notion to capture tidbits for myself. So this is a place where I would probably stash in a web development folder that I have. And it's just a tip to my future self as to like, hey, remember when you were trying to do that thing, and then you had to look it up and figure it out? Well, here's how you did it, so then I can revisit it in the future. CHRIS: I thought a number of times about introducing a flashcard system to revisit these sorts of things. Gary Bernhardt, who I had on a while back now, is building a platform that does this essentially for TypeScript and regular expressions in JavaScript arrays and a bunch of different topics. But it's got built into it the idea of spaced repetition, so you review a thing and then three days later, you review it again and then seven days later, and then ten. And there's a particular sequence to it, but it helps you to really internalize that knowledge. I've never gotten to the level of going to that, but I like that idea of being purposeful and trying to commit some things to memory because having them at your hands and being able to stay, like you said, in the terminal and closer to the work and not having to break out of the context, I do find a lot of value in that. But it does take some effort to build that up. So I've never quite gotten to that flashcard system myself. STEPH: Yeah, that's interesting. I think I have mixed feelings about it because, on one hand, it is nice to commit some things to memory. And on the other hand, I'm totally cool with having a way to organize stuff so I can easily search it and find it later and not use up memory space for something that I don't use that often that then I just can't commit it. So I could definitely see it being useful. But I'm also okay with just having a nice way to search for it. But pivoting a bit and circling back to the listener question that you alluded to earlier, we have a listener question from Jen and Jen wrote in about knowledge silos across different projects. Specifically, Jen wrote in "Hello, Steph and Chris, first of all, I want to say that I love to listen to your podcast for multiple years now." That's awesome. Thank you, Jen. "I like how you both share things along your week and fill the discussion with so many useful things and findings. Our team, which consists of three pairs, is currently working on two different projects. And due to that fact, we are creating information silos. Now we are looking into ways into how we can minimize those information silos. And do you have any ideas for how we can achieve this? Some additional context, switching pairs we're unsure about as this will be difficult for the new person to get up to speed. And currently, we are thinking about having a mob review session. But of course, with those, you only get a limited overview." All right. Well, thank you, Jen, for the question. I'm excited for knowledge silos because, I'll be honest, I am guilty of this one right now. I am a bit of a knowledge silo on my current project if we're telling our truths here on the show today. CHRIS: Steph, I thought I knew you. STEPH: You know, I'm full of surprises. CHRIS: Aren't we all at various times? This really does feel like one of those core things that I associate with you, though. So it is interesting. But it's so easy to fall into this space. I think without purposeful, intentional effort, this is the natural way things will trend. It's so much easier for the person who understands a portion of a system or an entire system to take on the next piece of work for that system. And I think we can probably offer some specific advice. But to talk about it more generally, Jen, I think you've found yourself in the pretty common position of there isn't a great answer here. There's going to have to be an investment of some amount of effort; some potentially decreased productivity for a period of time in order to get out of the situation that you're in. But that's just the name of the game. So if we name it as that, and we say that, then the question becomes how much effort do we need to put towards that, and what are the different ways that we can do it? So to go through the two that you listed, mob review sessions, I think can be a great way to give an introduction to a project, but I think they'll very quickly taper off in my experience. So I think it's a great way, especially if you're going to do any more formal things after that; a mob review or even a mob overview of the system is a great way to introduce new folks into it. But then from there, I personally would think that if you are feeling pain around the knowledge silos or even if you're not, because frankly, knowledge silos can very quickly become a major problem, say if someone needs to...if someone happens to leave the company or if someone needs to take some time off, anything of that nature, this is one of those things that can be fine until it's not, and then it's not in a very serious way, and that's the wrong time to try and resolve it. So I would very much be in favor of more purposeful things. As you described, switching pairs is an interesting one. I think that's a cost you're probably going to have to pay. I am interested; the way you're talking about it, it sounds like your teams are paired up consistently, so you're working exclusively in those pairs, which frankly is a really interesting thing. I think it was the previous episode where Steph and I talked about agile and particularly 100% pairing, and that's a pretty intense idea. It also does potentially lean towards this. Now, each of those groups of people, each of those pairs is collectively aware of the same subset of the application. But now, if you were to split that up and you have six individuals that pair in varying sets across the different projects, you have this sort of Venn diagram tapestry of knowledge of the different systems and the subsets and the features. And for that reason, I actually would probably question, at least if I'm correctly interpreting it, that you have three consistent pairs; maybe you shuffle that up. Maybe that's a practice that should be unwound. And now the pair should rotate on a daily basis or something to that effect. But overall, I think this is a cost you're going to have to pay but will pay off longer term. And it's definitely worth doing in my mind. But yeah, that's some high-level thoughts. What do you think, Steph? STEPH: I agree with all of those sentiments very much. And as you're talking about the cost and investing in the team, I think that's very true and something that needs to be done. The fact that they're working in pairs is already reducing knowledge silos because you at least have another person. Because I have been part of teams where there's one person that is that knowledge silo. So at least here, we already have two people that are aware of how code works and then why code was implemented in a certain way. So then, to categorize how painful that knowledge silo is or how risky that knowledge silo is, I think there are really two ends of the spectrum. And on one side, there's that example that you alluded to a little bit ago about isolating one developer on a project for six months, and they have minimal code reviews. And then suddenly that person leaves, and that's the hardest silo to then rectify. And it will probably be a lesson that stings enough that hopefully it won't be repeated where someone gets that isolated and then others have to figure out what was going on while that person was working on something independently. And then on the other side of that spectrum is you need to take some time to explore and understand a portion of the application that you haven't worked on before, or perhaps it's you need to understand how to work with an internal API. And stuff on that side of the spectrum feels more addressable with documentation and also mob reviews. And maybe there are also demos as well because a lot of the knowledge that goes into building a product may not be specific to the code, but it's more why was this done, and why was it built, and why did we go this way? And that feels more addressable with documentation, with commit messages, with those mob review sessions, and also with demos where then you can show the high-level functionality of a feature that's being implemented. So then, even if everyone else on the team doesn't have the technical knowledge as to how it was built, they'll have more of the user context, and the product context as this is a feature that we built, and this is why it's useful to the world. I find a lot of that knowledge is what's harder to capture because then you'll find a feature and wonder who uses this and how is it in use? And that stuff is harder to backtrack. Circling back to something that Jen caught out in their question, highlighting that it takes time for someone to get up to speed. That's a really interesting one for me because it goes back to the idea of wanting to know well; what's difficult? Not specifically what is difficult, but let's define difficult and what's a reasonable level of difficultness because onboarding to any applications or onto a new section of code is always going to take some time to process and understand. But what's an acceptable timeline in which someone can onboard and be productive? There's something that I've heard from someone at thoughtbot. I don't have the exact context to quote them directly. If I find it, then I'll be sure to add it to the show notes. And they shared that another company is measuring this difficulty of onboarding by they take the person's first starting date, and then they track to see when that person has merged in 10 PRs because they are looking to see how long it took for that person to get up and running to then feel comfortable, to then make some contributions. Often, your first couple of PRs might be something that's less challenging. It might be something that's updating the README because you are going through that onboarding process. And that's a great time to then reevaluate how clear the instructions are. But by the time you get to the 10th PR, you've probably addressed something that's a bit meatier and impactful to the product. And then they use that as a metric to then calculate okay; how well are we doing? Is it a month? Is it six months until someone gets there? How complicated is the application is another way that you could look at that metric to say, "Well, if it takes people a very long time to get there, maybe it's because of the codebase versus processes." And I really like that thinking of we have knowledge silos; let's think about where it's actually hurting us. And then, if we think it's specific to the onboarding process where that part is painful, then let's break down how we can measure how difficult it is, and then look for ways to improve it but then also track that improvement. CHRIS: Well, I like that idea of trying to quantify and measure onboarding. I've heard a lot of organizations having like, "We want you to ship a PR on your first day," that's a meaningful thing. But obviously, that first one will probably be pretty small, and it's sort of getting that first one out of the way, if anything. But it's not truly representative of someone being able to comfortably work within the repo, but ten, that starts to feel like a real number. And I do like quantifying it. More generally, I'm intrigued. Metrics around developer productivity is such a difficult thing to pin down. And it can, I think, become really complicated, especially if you're looking at individuals and trying to say, "Well, you had four PRs, but you had two PRs," and comparing individuals. But I do really like the idea of more aggregate stats of on average; right now last month, we were doing 1.2 PRs per week per developer, and now we're down 2.7 PRs per week per developer, something like that, and seeing that looks like something that we might want to address. Are there fundamental things that are happening that are causing development to slow down? Are we doing bigger PRs, et cetera? And starting to look at that, but try and have a metric to keep an eye on that. So I'm super intrigued by that and then again, more specifically to the onboarding one that you were talking about there. Actually, popping up a slightly higher level, though, I think both you and I sort of jumped into this conversation as, like, yes, knowledge silos got to fix those, that's a problem. And I do feel that way. This is a topic that I feel pretty strongly about and pretty clearly about that knowledge silos are the natural state that things fall to, and it's not a good thing, and we want to avoid it. But it is important to ask the question of who is deeming this to be a problem and for what reasons? And we had a good conversation two episodes back in response to a different listener question about consulting versus building product. And I feel like, with this, we can almost go up to the consulting level of this can be a problem, but it also maybe isn't. Or, who believes it's a problem? Is it management thinking, "Oh no, when that person went on vacation, suddenly everything ground to a halt? This is a problem, and we need to resolve that." Or is it the development team themselves saying, "Hey, we feel like we're a bit siloed here, and that's a problem we're recognizing," but they don't have buy-in from management. Or worst case management saying, "This is a problem, but you get no time to resolve it." As long as everyone's in agreement of the potential benefits and aligned to this is a thing that we would want to improve, and then also aligned to there will be a cost to resolving it, that it's not free to try and unwind this siloing of knowledge, then I think everything can be great. But any mismatch at sort of any level of that either on the cost or the benefit side can be problematic. And so getting to the point where you've had a clear conversation that defines this and gets everyone to come to an idea of yes, we think it's a problem, and yes, we want to put in the effort to resolve it, then I think you can move forward and tackle any number of different approaches. But I think you have to start from that conversation. STEPH: I love asking that question of how has this manifested into a problem or a concern? Because you just highlighted a really great example where if it's only a concern because someone was on vacation and the team couldn't respond to a customer request or couldn't respond to an outage, then there are different ways to address that. So documentation may not be the best way to help out with that. That's probably a pairing session. So then someone can respond quickly to an outage versus you don't want to say, "Okay, here's a couple of pages of documentation," and then have that developer go on vacation again, and then there's an outage, and you're trying to read through those pages to figure out what's wrong. So figuring out the right approach based on the pain that's being felt feels like a really great way to go about this. Because frankly, breaking down a knowledge silo is always going to have a cost. So you want to make sure that you're being as cost-efficient as possible with your approach and then addressing the root concerns and making everybody's lives better. Because I do think there's some knowledge silo that's appropriate. And I think silo may be the wrong word, but someone who is more skilled or an expert in the area or has more context for a particular area of the application. Because applications can get so large that not everyone's going to know everything and context switching between all of those can be really challenging. So I think it's very natural that you're going to have different people that you go to around a certain feature. If there is some lofty feature around search and you know a particular person that has worked on it for a while, then you go to them, and that feels like an appropriate level of knowledge that someone has obtained. And I wouldn't classify that as a silo at that point. But then if you do get to the point where that person went on vacation and then search broke, then you can start to revisit okay, maybe this person does have too much context, and then we can offload some of that context to someone else. CHRIS: There was a phrase I used earlier of like a patchwork quilt, but I think that's not quite the right image. There's an image in my mind of little islands of color that are fully separated; that's bad. And then there's a version of more like a Venn diagram overlap where each of the colors sort of bleeds into the other ones, and I think that's good. But then the perfect overlap where it's just one big blob of brown because all the colors are the same, that's bad. And I think that's what you're highlighting is like, you don't want to go to that. You don't need the perfect overlap of everyone having a complete shared knowledge set. I'm trying to make word pictures over internet radio. So it's probably not going great, but it's something to that. Like, there is an optimization here, and I think the way to find that is by starting from what are the pain points? What are we feeling that is less than optimal? And then coming up with solutions that directly address those pain points, not generically try and target like knowledge silos bad. And retros are a perfect way to do that. So if you listen to our previous episode where we talk about the virtues of retros and other agile philosophies...This is great. I feel really good about being able to reference previous episodes. I think we've talked about good stuff in the previous episodes. STEPH: You've been on fire with this episode. I think you've referenced at least two, three episodes at this point. [chuckles] CHRIS: Yeah. Wow. Well, I mean, we're at 300 now, so we've got plenty to go back to. [laughter] STEPH: We've got plenty of content to reference. I think you and I do have an advantage here based on our experience where we have had to join a number of projects. And then we know our time with that project is very determined, and we want to make sure that we don't take any knowledge with us. So something that you and I have acquired as a skill is seeking knowledge when we first join a project and asking a lot of questions around how the application works and then understanding more about the intent of different features, and then knowing where to dive into a codebase to then make fruitful contributions. And I think there's a similar approach that can be taken when trying to break down a knowledge silo is a person who is that silo may be in a spot where they're having trouble communicating all that information and then dispersing it to others. So then us, as their teammates, can go to them and try to ask those types of questions to then help ourselves level up and then recognize areas that don't feel documented. And maybe it's adding documentation, maybe it's adding tests, or maybe it's doing a demo, maybe it's recording something about the feature and then sharing that with the team. But then you can be an advocate for that person who is in a silo position to then help them share that knowledge because they may be too far down that path where they don't recognize what they know, and other people don't. I don't know if that's directly related to being a knowledge silo but just an additional way to approach helping breaking down when you recognize that a silo does exist and looking for ways to then help that person communicate and distribute their knowledge. CHRIS: Yeah, I think you're describing a distinction between a push versus a pull. It could be incumbent upon the person who has the knowledge to try and push it out to the team. But often, they're going to be perhaps a more senior person. They've got code review to do. They've got other meetings, and planning, and things, and they just may not have the time. But is there a way that other team members can proactively pull that information from them and help them find the moments that will clarify that? So, yeah, broadly, as a team, let's rally around the desilofication of the whole adventure. STEPH: That's exactly what I was going for is that push versus pull mentality and how we can break down the silo from both sides. So thank you, Jen, for that wonderful question. I hope we gave you some helpful ideas and suggestions around addressing a silo and then also identifying the pains that you're feeling so that way you can find the most cost-effective approach. But on that note, shall we wrap up? CHRIS: Let's wrap up. STEPH: The show notes for this episode can be found at bikeshed.fm. CHRIS: This show is produced and edited by Mandy Moore. STEPH: If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or a review in iTunes as it helps other people find the show. CHRIS: If you have any feedback for this or any of our other episodes, you can reach us @bikeshed on Twitter. And I'm @christoomey. STEPH: And I'm @SViccari. CHRIS: Or you can email us at hosts@bikeshed.fm. STEPH: Thanks so much for listening to The Bike Shed, and we'll see you next week. All: Byeeeeeeeee! 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 this week's episode, Chris and Steph share a speedy step to restart your rails server and chat about accessibility improvements and favorite a11y tools. They also dive into a tale of database switching and delight in a new Rails query method that returns orphaned records. Restart Rails server via tmp/restart.txt (https://twitter.com/christoomey/status/1387799863929212931?s=20) WebAIM: Constrast Checker (https://webaim.org/resources/contrastchecker/) IBM Equal Access Accessibility Checker (https://www.ibm.com/able/toolkit) axe™ DevTools (https://www.deque.com/axe/browser-extensions/) AccessLint (https://accesslint.com/) Assistiv Labs (https://assistivlabs.com/) An introduction to macOS Head Pointer (https://thoughtbot.com/blog/an-introduction-to-macos-head-pointer) Rails date_select (https://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-date_select) Rails strong_migrations (https://github.com/ankane/strong_migrations) Ruby RBS (https://github.com/ruby/rbs) Sorbet - Ruby Type Checker (https://sorbet.org/) Scout APM (https://scoutapm.com/) Rails 6.1 adds query method missing to find orphan records (https://blog.saeloun.com/2020/01/21/rails-6-1-adds-query-method-missing-to-find-orphan-records.html) Transcript: STEPH: People put microphones in front of us. That is their fault, not ours. We just show up. Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Steph Viccari. CHRIS: I'm Chris Toomey. STEPH: And together, we're here to share a bit of what we've learned along the way. Hey Chris, happy Friday. CHRIS: Happy Friday. STEPH: How's your week been? CHRIS: It's been great. I did something that is wildly overdue, but I got a new chair and one day in. But it's also a very familiar chair because it's basically the same -- I think it's the same model as we had at the thoughtbot office. And it's nice to have a chair that is reasonable. And I think my old chair was maybe ten years old or something, deeply embarrassing and absurd like that for such a critical piece of infrastructure in my house. STEPH: I mean, I guess depending on if it's a good chair. I don't know what the lifespan is of a good chair. [laughs] CHRIS: I would not describe it as such. STEPH: [laughs] CHRIS: I think it was like $100 at Staples. It was a fine chair. It served me well for many years. I'm very slow and cautious with what I consider to be large-scale purchases. I hate the idea of having a thing that I've spent a bunch of money on, but I don't actually like. And these are very solvable problems. But I just tend to drag my feet and over-research and do all those sorts of things. And so finally I was just like, nope, we're going to get a chair, got a chair. Cool. Now I have a chair, and it's good. It's got all of the adjustments, which is what makes it very nice. I'd say Steelcase Leap is the model for anyone that's interested. STEPH: That's funny. I tend to do the same thing. I tend to drag my feet until I get desperate enough that then I'm forced to make a decision and buy something. I do have an oddly specific question. Do you like chairs with or without the arms? CHRIS: Oh, with the arms. STEPH: Really? CHRIS: Yeah. STEPH: I am team, no arms. CHRIS: Where do your arms go if there are no arms to put on the chair? STEPH: They're always on my lap or on my keyboard. So I just don't rest them on the armrest. CHRIS: Interesting. I feel like that would put -- I've definitely had small bouts of RSI strain fatigue in my forearms. And so I'm very purposeful with how I'm bracing my wrists. I have a little wrist rest that I put my hands on when I'm using my keyboard because the keyboard is slightly raised up because I have a nonsense mechanical keyboard, of course. STEPH: Delightful, not nonsense. CHRIS: Yeah, I love it. I would never trade that in, but I have to make it work and not actually sacrifice my body for a clackety keyboard. [chuckles] But yeah, I think I need some more support for my arms; otherwise, there's too much pressure on my wrists, and things are breaking at weird angles, and that's been my experience. I'm intrigued by the free-flying no arms on the chair approach that you're talking about. This particular model has nine degrees of freedom on the armrest. So I'm able to bring them in and forward and at the exact right height so that they perfectly meet my arm where it would naturally be, and that seems good. That seems like the thing that I want. STEPH: That makes a lot of sense. But yeah, I'm team no arms. Every time I have them, I can't get them at the right comfortable spot. And I like the freedom of where I can quickly get up and out of my chair and not have arms in the way, which sounds like a very small improvement in my life, but yet it's what I want. CHRIS: I just like the idea of you sitting there and being like, I need to be able to make a quick escape at any moment; who knows what's going to happen? And I need to be able to run the other way. STEPH: If there's a gnarly bug, I got to be able to run. I can run away quickly as possible. [laughs] CHRIS: But in other news, so yeah, new chair that's great. I also recently embraced something in the Rails world that I have known about I think for forever for the entire time that I've worked in Rails, but I've never really used it, which is the tmp/restart.txt file, which my understanding of it is if you touch that file, or if that file exists, Rails will recognize that and will restart the server in development mode. And I think I've always known about this, but I've never used it. And I recognized recently that either I was trying to use a gem that I'd added to the Gemfile, but my server didn't know about it. So I was going to do the thing that I normally do, which is kill the server and then restart the server so CTRL+C and then CTRL+P in my terminal and hit enter, and then wait a bunch of minutes and get distracted, all of the bad things there. And I was like, wait; I remember that there's a thing here. And I don't know why I haven't been doing this for years. It's so much better. I actually went the one step further, and I configured a tmux binding so that tmux prefix and then R will touch tmp/restart in the local directory of the tmux session. That's been very nice, I will say. So I keep moving between branches. And I have environment variables that I need to reload or config initializers that I've made a change to, and I want to load that in. Or a gem that I've added to the Gemfile and I've now installed, but the server doesn't know about. All of these are just so quick now. And why wasn't I doing this the whole time? STEPH: I saw that you mentioned this on Twitter a couple of days ago, and I was so excited. But at the moment, I bookmarked it for later, but I didn't have time to actually really check it out. And I'm so glad you're bringing it up because I actually just tried it while we're chatting. So I started up my Rails server, and then I did the touch tmp/restart, and this is amazing. This is awesome. I'm very excited. CHRIS: It just does the thing. STEPH: It just does the thing. CHRIS: Yeah, it's so nice. [laughter] STEPH: Yeah, this is fabulous, almost as good as the pending migrations button. Not quite because that's a very special button, but this is also up there. CHRIS: It's a very, very good button. [laughs] I really got very enthusiastic about that button, didn't I? But I stand by it. It's a very good button, and this is a very good file. But this file has existed for so much longer, this workflow. And so many times, I have restarted the server and have been annoyed that I had to do it. And my brain just had this answer available. I didn't read a blog post and relearn this thing. I've always known it. And it was this one particular time that my brain was like, "Hey, you know how we're always annoyed by having to restart the server? You know there's another answer, right? I know that you know it because I'm your brain, and I'm telling you this." [chuckles] This is my weird internal monologue. So I'm very happy to be on the other side of that and to share that with as many people as possible who may be, like me, know about this but haven't actually leaned into it, small things that make the Rails world very nice. STEPH: Well, I'm glad you internalized it and then surfaced it because this is not something that I had heard of before. So I'm very appreciative of it. This is going to be great. CHRIS: Happy to share the wealth. But yeah, that's some of the stuff that's been up in my world. What's been going on in your world? STEPH: It's been a rather busy week. Most of that week has been focused on improving the accessibility of existing pages and forms, which is an area that I don't get to spend a lot of time, but each time I do, I really would like to be a pro when it comes to accessibility. Well, that's probably a long journey to become a pro. I would like to become more knowledgeable in terms of accessibility because it is so important. And while working specifically on these accessibility tickets and improvements, I've discovered a few helpful tools that I figured I'd share here. So one of the tools that I've started using is a color contrast tool. It's created by WebAIM or web accessibility in mind. And a number of our headers in our application have a white font that's on a background color, and we were getting warnings that this isn't very accessible and that there's not enough contrast. So with the Contrast Checker, you can provide the foreground color and the background color, and then it's going to tell you that contrast ratio. So if you're wondering, well, what's a good ratio? That's a great question. And the W3C Accessibility Guidelines recommend a contrast ratio of 4:5:1 for normal texts and 3:1 for larger texts. Larger text is anything that's typically around 18 px, 18.5 px, or larger. So the color contrast tool has been really helpful because then that's been very easy that we give the blue that we're using, and then we can just darken it a bit to improve that contrast. And then we apply that everywhere throughout the app. The other tool that I've been using that I'm really excited about it's a browser extension called the IBM Equal Access Accessibility Checker. Is that something you've heard of or used before? CHRIS: I have not heard of that. STEPH: I would love to know what you currently use for accessibility, and I'll circle back to that in just a moment. But for this particular browser extension, I'm pretty sure they have it for multiple browsers. I'm using Chrome. So I've installed the Chrome extension. Once you have it installed, you can open up the browser console and then tell it to scan the page that you're on. And then it generates a really helpful report that has all the high-level offenses, which are called violations. It also has warnings and recommendations. And then if you click on a specific issue, then the right-hand area shows a detailed description of the offending HTML, what's wrong, why it's important, which I really appreciate that part, and then a couple of examples of how to fix it. So it's been a really nice way as we are working to improve the accessibility of form. We actually have feedback to know that we are making progress and that we are improving the accessibility of that particular page. And then circling back, I'm curious, do you have any particular tools that you use when it comes to improving accessibility or any standards that you tend to follow? CHRIS: Yeah, this is a very apropos question. I'm working on a new project now, and accessibility is definitely something that I want to consider on every project, but it's all the more so important for this particular project, or it's something that we're, as a team, collectively really embracing early on and wanting it to be a core focus of how we're building out the application. That said, I will say that I'm accessibility aware but far from an expert and still very much learning. But some of the things that I have used are the axe DevTools. I forget what the acronym actually stands for there, but we can certainly include a link in the show notes. But those are DevTools that allow you to, I think, do some color contrast checking actually in the browser just right there, which is really nice. There's also AccessLint, which is a project that scans pull requests and, where possible, does static analysis of the HTML. And that's actually by some former thoughtboters. So it's always nice to have that in the reference. There's actually a new tool that I've been looking at. I haven't actually tried it out yet, but it's from a company called Assistiv Labs, Assistiv without an E interestingly at the end. But their tool is, as far as I can tell, it allows you to use screen readers and other tools but across various platforms so that you sort of turn on -- It's very similar to if you've ever used an emulated Internet Explorer session because you're working on not an Internet Explorer machine, but you want to make sure your site works in Internet Explorer, same sort of idea, I believe. But it allows you to do the same approach for accessibility. So using a screen reader or using what the native accessibility technologies are on various platforms and being able to test across a wide range of things. So that's definitely one that I'm going to be exploring more in the near future. And beyond that, there are a handful of static analysis-based tools that I've used. So Svelte actually has some built-in stuff around accessibility. Because they are a compiler, they can do some really nice things there, and I really appreciate that that is a fundamental concern that they've built into the language, and the framework, and the compiler, and all of that. And I've also used ESLint A11y, which is the acronymnified version of the word accessibility. But that again, static analysis, so it can only go so far. And unfortunately, accessibility is one of those things that's hard to get at from a static analysis point of view, but it's still better than nothing. And it allows you to have a first line of defense at the code as you're authoring it. So that's a smattering of things. I've used some of them. I'm interested in others of them. But this is definitely an area that I'm going to be exploring a bunch more in the near future. STEPH: I like that you brought in the static analysis tools because that's the other thing that's been on my mind as we're making these accessibility improvements; that's been great. And we can run this particular browser extension to then check for warnings or issues on the page but then looking out for regressions is on my mind. Or as we're introducing new pages and new forms, how do we make sure that those are up to standard if someone forgets to run that extension? So I really like the idea of -- There's AccessLint that you mentioned, which will then scan PRs for accessibility improvements. That sounds really great. I'm also intrigued if there's a way to also -- I don't know if maybe tests are a good way to also look for any sort of regressions in terms of changes that we've made to a page. I don't know what those tests would look like. So I'll have to think on that some more, but I think some people at thoughtbot have thought about it. CHRIS: My understanding is the testing library suite of testing frameworks, so it's like testing library React, testing library, et cetera. It's primarily used in the JavaScript world, although there is Cypress, which is more of a browser-level automation. But it fundamentally works from not exactly an accessibility but a -- It doesn't allow you to do DOM selectors. It really tries to hide that. And it says, "No, no, no. You're not going to be digging in and finding the class name of this thing because guess what? A user of your application can't do that." What we want are – Typically, it's like find by label or find by things that are accessibility available or just generally available to users of your application. So whether it's users that are just clicking around or if they're using any sort of assistive technology, the testing library framework forces you in that direction. You can't write a test if your code is inaccessible tends to be the way it plays out, and it really nudges you in that direction. So it's one of the things that I really love about that. And I actually miss it when I'm working in a Capybara test suite because, as far as I know, there is not a Capybara testing library variant of it. And really, at the end of the day, it's just a bunch of functions to allow you to select within the context of the page. But again, it does it from that standpoint, and I'm all about that. STEPH: Yeah, that's really nice. That's a good point. Yeah, I don't think Capybara has that explicitly. I know that you have to use specific parameters. Like, if you want to access something on the page that is hidden, that's not something you can just do easily. You have to specify: I'm looking for an element that is hidden on the page. But otherwise, I don't think it goes out of its way to prevent you from doing that. There is an article that this conversation about accessibility made me think of. There's a really fun blog post written by Eric Bailey, who has been or who is a champion of accessibility at thoughtbot and has written a lot of great content around making the web more accessible. And in addition to publishing with the thoughtbot blog post, he has written for a number of publications. And the article that comes to mind that he published on the thoughtbot blog posts is An Introduction to macOS Head Pointer, and we'll link to it in the show notes. But he does a great job walking through what the head pointer is on macOS and then how to use it. And he uses his eyebrows to essentially move the mouse and then click on certain buttons or click on certain links on the screen. And it's incredible. So if you need a little bit of accessibility and joy in your life, I highly recommend checking out that article. CHRIS: Yeah. Eric has absolutely just been such a fantastic champion of accessibility. And he's definitely someone that I think of constantly as being -- I think he's involved with the Accessibility Project. He writes on CSS Tricks. He's around the internet just being the hero we need because accessibility is such a critical thing. And I'm a deep believer in the idea that accessible applications are better for everyone. And I so appreciate the efforts that he's putting in out there. Thanks, Eric. STEPH: Thanks, Eric. And then, on a slightly separate note, I have a slight complaint that I'd like to file. And this one is with Rails specifically. And I'm filing this complaint with the understanding that I'm also very spoiled in terms of Rails does so much, and I'm very appreciative of how much Rails does for me and for us. But specifically, while working on accessibility for a date of birth form field, so it's a form field with three different selects, so you have your month, day, and year. And while creating this, there's a very helpful Rails method that's called date_select, where then you can generate all three of those select fields. And you can even specify the order in which you want them generated, but this particular function doesn't have a way to make it accessible. So you can generate a label for each option that's in the select dropdown. And there's no parameter. There's nothing you can pass through. It doesn't automatically generate it for you. So I was in a spot where I was updating a form that's using the Rails dateselect. I can't use dateselect and make an accessible dropdown selection for date of birth. So instead, what I had to do is I had to split it out. I had to move away from using dateselect, and instead, I'm using selectmonth and then selectday and selectyear because from there, I then can pass in; in my case, I'm using aria-label to provide a label because I don't actually want the label to show up on a screen, which could be another accessibility concern because we do have the birth date label for those three sections. But then we still want at least each text field to have a label, even if it's only visible to screen readers. So then that way, if someone is selecting from year, they understand they're selecting from year or for month they're selecting from month. So by using selectyear and selectday and selectmonth, I could specify the aria-label as month, day, or year, but I couldn't do that with the dateselect. And I just realized that there's probably a number of date of birth forms out there that aren't accessible because us Rails developers are leveraging this existing method. So it just seems like a really good opportunity to improve date_select to be able to pass in a label or generate one automatically. CHRIS: Wow. I'm surprised that's the state of the art that we're currently at. I really wonder if there have been conversations or if there are fundamental limitations because I'd be surprised if such a core piece of the Rails world someone hadn't brought this up in the issues. What's the story there? Because I'm guessing there's a story there. Although flipping it around, I wonder -- I've never loved that input sequence; as an aside, like three different selects, that's not how I think of my birthday. My birthday is one thing. It's not three things that we smash together. But I wonder are we at a point now where IE 11 usage is so small that we can use a native date_select input and then have a polyfill -- And then I start to trail off because I don't know what the story is for. Like, I think Safari doesn't do a great job, and I forget where it's at right now. And what about mobile Safari? And wouldn't it be nice if everything was just easy and everybody kept up? [laughter] But that's an aside. But yeah, that's part of my question here, is like, can we just not use that thing at all? Like, the three select dropdown version of picking a date of birth because, man, that's my least favorite way to do it. STEPH: Yeah. I'm with you. I'm also curious if there is a story behind this and also if anyone has a different opinion, and I'd love to hear it. Because this has been my experience in digging through the docs is I would date_select, and I could not find a way to pass in a label or have one generated to make it accessible. So then that prompted me to use the three different methods, which, by the way, is fine. It made me stop and pause to think this is the method that most people recommend the usage of in terms of creating those three different select fields for a date of birth or for any particular date that you're supplying; it does not have to be a date of birth. So it also surprised me that then we couldn't make it accessible. So yeah, I was a bit miffed in the moment. [laughter] I had to walk myself back and be like, well, if I want to make the world a better place, I should help make the world a better place. And that started with changing the code in this codebase. But then also it means looking into Rails to see if there's an improvement that I could help with there. CHRIS: This is what we do: we take our moments of miffed, and we turn them into positive action in the world. This is what we want to see. [chuckles] STEPH: I figure the least I can do is share a blog post or something on Twitter that shows what it was before and then using the new dateselect functions because that is reasonable, although working with a form is a bit different. It got a little tricky there in terms of making sure that each value for each select field is still being passed within the expected nested parameter. And some of that was available in the public API for selectyear and select_day, but it's not as well documented. So I'm like, well, this seems to be intentionally public, but it's not documented, so I feel a little nervous about using this. Yeah, that's it. I just wanted to share my annoyance with Rails [laughs] or the fact that it made me work so hard to have a date of birth field. CHRIS: You joke, but that's a lot of why we use Rails is because we want these common regular things that we're doing to be as easy as possible, to require as little code on our part as possible but also this sort of thing like there's a lot of subtlety and stuff. Accessibility is one of those things that I want a framework that has security, and accessibility, and ease of use, and all of these things just baked in, so I don't have to think about it every time. It turns out having a date of birth, or generically any date field, is going to come up in web applications a lot, it turns out. And so having all of that stuff covered is frankly what I expect of a framework like Rails. So I'm totally on board with your being miffed here. STEPH: Yeah. Those are all really valid points. So I'm with you. What else has been up in your week? CHRIS: Well, we've been leading up to this, I think, for many weeks. I did a Rails 6.0 upgrade a while back, and a big reason for that was partly just to get on the current version of Rails but also because I wanted to open the door to database switching, and finally, this week, I tackled it. And let's tell a tale because there was a bit of an adventure, if we're being honest. Fundamentally, all the stuff there makes sense. I'm happy with the end configuration, but there was a surprising amount of back and forth. I broke the app more times than I want to actually announce on a podcast, but I broke it only for a brief period of time. It's fine. It's fine. Everybody's fine. [laughs] I feel a little bad about it, but these things happen. But yeah, it was interesting, is how I'll describe it. So fundamentally, Rails just has nice configuration for it. So at a high level, you're introducing your config/database.yml. Instead of it just being production is this URL, you now say primary is this replica or follower, whatever you want to name it is this. So you have now two configurations nested within your production config. And then in your ApplicationRecord, you inform Rails that it connects_to, and then you define a Hash for writing goes to the primary, reading goes to the follower. And you have to sync those up with the thing you just wrote in the config/database.yml but fundamentally, that kind of works. That makes it possible in your application to now switch your database connection. The real magic comes in the config environment production file. And in that, you specify that you want Rails to use a database resolver that says GET requests go to the replica, and anything that is not a GET request goes to the primary. So anytime you're writing data, anytime you're changing data within the system, that's going to go to the primary. And there's also a configuration that, as far as I can tell, gives a session affinity. So for the next two seconds after that, even if you make a GET request subsequently right following it, so you make a right, you POST, and then immediately after that, you do a GET. Like, you create an object, and then you get redirected to the show page for that object, Rails will continue to go to the primary. I think it's probably using a cookie or something to that effect, but you can configure that time span. So you can say like, "Actually, we see that our follower lags behind a little bit more, so let's give it a five-second timeout where all requests for that user will then go to the primary." But otherwise, once that timeout clears, then you're going to switch back, and you're going to go to the follower, and all GET requests will happen to the follower. And that's the story. You have to configure that, and then it works. STEPH: I always love when you start these out with "I have a tale to tell." I very much enjoy these adventures. And you also answered my question in regards to if you immediately just created something, but then you do a fetch that's very close to after you just created it and how that gets rendered. So that was perfect. CHRIS: Frankly, the core configuration is very straightforward, and it's very much in line with what we were just talking about of; this is what I want from Rails: make this thing very easy, hide the details behind the scenes. But as I said, there's a bit of a tale here. So that was the base configuration. It sort of worked but then immediately upon deploying it to production -- So we deployed it to staging first just to test it out. Staging was fine, as is often the case. Increasingly, I'm leaning into Charity Majors' idea of you got to test in production. You're testing in production even if you say you aren't. So once it got to production, we started seeing a bunch of errors raised or a handful of errors. And they were related to a handful of controller actions, which are GET requests, so they're either show or index, but in them, they were creating, or they were trying to create data. And so we were getting an error that was read-only connection error or something to that effect, ActiveRecord read-only, I think, was the error class. And that makes sense because I told it, "Hey, whenever you get a GET request, you're going to use that follower." But the follower is a read-only database connection because it's a follower, and so it was erroring. It was interesting because when this happened, I was like, wait, what? And then I looked into it. And it's frankly fine at all the levels. It is okay to create a record in a GET request as long as that creation is idempotent. You create if it doesn't exist, and then from there on, you use that same one. That still fits within the HTTP rules of idempotents, and everybody's fine with that, except for the database connection. Thankfully, this is relatively easy to work around. You just need to explicitly within that controller action say, "Use the right database, use the primary." And the way I implemented that, I wrote a method within ApplicationRecord that was with right DB connection, and then it takes a block, and you yield to that block. It's basically just proxying to another similar thing. And it's very similar to wrapping something in a transaction; it sort of feels like that. It's saying just for this point in time, switch over and use the primary because I know that I'm going to be having some side effect here. STEPH: Wow. That's so fun. I'm sure it was not fun for you. But as me hearing the story later, that's fun in regards to I hadn't thought about that idea of you're telling all the GETs you can only go to the read, and now you're also trying to create. I am feeling nervous in terms of local development. So if you're working on a new controller and if you have a fetch or GET action, but you're also creating something, you haven't seen another controller that is demonstrating that strategy that needs to be used. Is it just going to work locally? I imagine it does because it was working for the other code that you were running that didn't yet have that strategy in place. So I'm feeling nervous in terms of someone could easily miss that. CHRIS: I think there are a couple of different questions in what you just said. So let me try and answer all of the ones that I think I heard. So for local development, your database/config.yml is still going to be the same as it was. So you're just connecting to database namedevelopment. There's only one of them; there's no primary follower. So this is a case where you have a discrepancy between production and development, which is always interesting. And maybe that's something to poke at because ideally, I want as little gap there as possible. But this is one of those cases where I'm like, eh, I don't think I'm going to run two databases locally and have one be a follower. That feels like too much to manage. Under the hood with that right DB connection method that I talked about where you want to explicitly opt-in, in the case that we're in development, I just yield directly to the block. So instead of doing the actual database switching at that point, the method is basically saying, "If we're in production, then switch to the primary and yield and if we're not in production, then just yield." And so it'll just run that code, and it'll connect to the only database. More generally, I have the connectsto configuration; I wrapped that. So that's in ApplicationRecord where you're saying, "Hey, connect to these databases based on this logic," that is wrapped if we're in production check as well. And the same thing in the top-level configuration that says -- We're getting ahead of ourselves in the story because this is the end state that I got to. It's not where I started, and I screwed some stuff up in here, but basically, all of the different configuration points, my end result was to wrap them in a check that we are in production. STEPH: Okay. Sorry if I rushed your story. I was already thinking ahead to how could we accidentally goof this up? That makes a lot of sense for the method that's with right DB connection, that method that then it's going to check if we're in production, then we can use a primary follower strategy; otherwise, just use the database that we know of. So that helps a lot in answering those questions. And then we can pause and then get to my question later. But my other question that I'm curious about is what helps us prevent the team from making this mistake in terms of where we're adding a new controller, we add a new GET action, and we are also creating data, but then someone doesn't know to add that strategy that says, "Hey, you are allowed to go to the primary to also get data but also to write data too." And I'll let you take it away. CHRIS: I don't know that I have a great answer to that one if we're being honest. As I saw this, it was very easy to find -- I think there were three controller actions that had this behavior in the system that I was working on. They all threw errors. It was very easy to just wrap them in this extra method and fix that, and then we're good, and I haven't seen that error again. As for preventing it from new instances of this behavior, I don't have a good answer other than potentially you share this information within the team and then PR review. Ideally, someone's like, "Oh, this is one of those things you've got to wrap it in the fancy database switching logic." Potentially, and I don't actually think this would be possible, but there's a chance that RuboCop or other static analysis type thing could look inside any index or show action and say, "I see a create or an update or any of the methods." But again, Rails is so hard to do static analysis on that I would be surprised if were actually feasible to do that in a trustworthy way, probably worth a poke because this is the sort of thing that can easily sneak out. But potentially, my answer is, well, it'll blow up pretty loudly the first time you do it. And then you'll just fix it after that, which is not a great answer. I'm open to that being a mediocre answer at best. STEPH: [chuckles] Yeah. That's a fair answer. Just because I pose a question, I don't know if there necessarily is a great answer to it right away. And disseminating that information to the team to then having the team be able to point that out also sounds very reasonable but then still hashes that danger of someone overlooking it. The static analysis is an interesting idea, sort of like strong migrations. As you're introducing a new migration, strong migrations will do a wonderful job of showing you concerns that it has with the migration that you've added. And this is all just theoretical dreams and hopes because, yeah, that would help prevent some of those scenarios. CHRIS: It's interesting now that this is the second time we've discussed static analysis in this very episode. Clearly, it's a thing that I want more of in my world, and yet I work in languages like Ruby that are notoriously difficult to perform static analysis on. STEPH: I had a moment today writing a method that was currently just returning a string each time but then I was about to update that method. I was looking for a way like, well, maybe I don't always want a string. Maybe I actually want a Boolean here. But in the other case, I want a string. And the person I was pairing with they're like, "You could return -- [inaudible 29:31] Boolean in one case and then a string in the other case. Like, this is Ruby." [laughs] I was like, true, but I feel bad about it, and I don't love it. And we just had a phone conversation around that. If you're in the Ruby world following the more functional programming or type strictness and where you're returning specific types or trying to return a consistent type, it's ideal. But then also in Ruby, it's like it's Ruby, so sometimes you can finagle the rules a little bit. CHRIS: YOLO, as they say. STEPH: [laughs] CHRIS: Yeah, I'm definitely interested to see where projects like Sorbet and...I forgot what the core Ruby typed thing in Ruby 3.0 is called, but either of those. I'm really intrigued to see where they go and how the Ruby community either adopts or doesn't. I wouldn't be surprised if that were part of the outcome there. I've been impressed with the adoption of TypeScript and JavaScript, which is also a very, very free language, not quite to the degree that Ruby is. But yeah, it remains to be seen what will happen on those fronts. But continuing back to our saga, so we've now had the read-only error, we've fixed those, just wrapped them in blocks, and said, "Explicitly connect to the primary." So the next thing that I did after that, I realized that my configuration was a little bit flimsy is probably the best word to describe it. I was explicitly creating a new environment variable with the URL, the Postgres URL of the follower. And so I was using that environment variable to define where the URL like the Postgres URL of the follower database -- But I realized if Heroku comes in and does any maintenance on that Postgres instance, it's possible that the AWS IP address or other details of it will actually change and so that Postgres URL will no longer be valid. So that's one of the things that I rely on Heroku for, is to maintain my databases for me. But they will update, say, the DATABASE_URL environment variable if they change out your database. But now, I had broken that consistency. And so I'd set us up for somewhere down the road this will break, and I realized that because Heroku reached out and said, "Hey, your follower database needs maintenance." And I was like, oh, no. So, I tried to get it from -- It turned out, in this case, it didn't actually change. They were able to swap it out in place, but I wanted to add a little bit of robustness around that. And so I actually reached out, and Dan Croak, former CMO of thoughtbot, actually had written a wonderful blog post about how to configure this and particularly how to configure it in the context of Heroku. And he described how to use the Heroku naming scheme for the environment variables. They happen to have colors in them. So it's like Heroku Postgres cyan URL or orange URL or purple URL. And so he defined a scheme where you set an environment variable that describes the color, and then it can infer the database URL environment variable from that. And then went the one step further to say, "If that color environment variable is set, then treat as if we are configured for database switching. But if it is not set, even if we're in production, pretend like we don't have database switching," which that was another nice feature that I hadn't built in the first place. When I first configured this, I just said, "Production gets database switching. And if we're in production, then database switching is true," but that's actually not something that I want. I want to be able to say, "Upgrade our follower," at some point or do other things like that. And so I don't want to be locked into database switching on production. So that was a handful of nice configurations that I wanted to get to. Unfortunately, when I tried to deploy that switch, man, did it break. It broke, and then I was like, oh, I see I did something wrong there. So then I tested again on staging. Staging was fine. And then I went to production, and it broke again. And this happened like three times in one day. I felt like a terrible programmer. I had no idea what I was doing. Turns out that staging and production had different environment config files, and so their configurations were fundamentally different. They also had a different configuration for the database level. So one of the things I did as part of this was to clean those up and unify them so that staging was production with some environment variables to config it, but identically production, which is definitely a thing that I believe in, and I want basically all the time. I don't think we should have a distinct staging environment config that is wildly different. It should only vary in very small ways, basically just variables that say, "This is where the database is for staging," but otherwise be exactly configured as production. So I eventually got on the other side of that, fixed everything, have a nicely Heroku-fied color-based environment variable scheme, which is a bit of a Rube Goldberg machine, but it works. And I was able to hide that config in one place. And then everything else just says, "If there is a database follower URL defined, then use it." But yeah, so that was the last hard, weird bit of it. And then the only other thing that I did was I realized that this configuration was telling the Rails server how to behave, but there are also background jobs. And this application actually happens to have a ton of background job traffic. And so I did a quick check of those, and there were a handful of background jobs that were read-only. A lot of them were actually sending data to external systems, so to analytics or other email marketing or things like that. And so constantly, as users are doing anything in the application, there are jobs that are queued that aggregate some information, maybe calculate some statistics, and then push it to another system. But those are purely read-only when those jobs execute. And so I was able to add another configuration which said, "Use the read-only connection and configure that to wrap those particular sidekick jobs." And with that, I think I have a working database switching configuration that will hopefully give us a lot of headroom in the future. That's the idea, that's the dream, but we will see. STEPH: That is quite the saga between having GET requests that create data and then also the environment inconsistencies, which is a nice win that then you're able to improve that to make those environments more consistent. And then the background jobs, yeah, that's something that I had not considered until you just brought it up, and then being able to opt-out of the database switching sounds really nice. In regards to moving in this direction, you're saying gave you a lot of headroom for this; when it comes to monitoring performance, is there anything in place to let you know how it's doing? CHRIS: I love that I knew that this was going to be your question. I love that this is your question because it's a very good question. And unfortunately, in this case, it's actually somewhat unsatisfying. So as is my typical answer for this, we're using Scout as the application performance monitoring tool on this. And I was able to go in and monitor what it looked like a week ago, what it looked like after I made the change, and it was a little better. And that's all I can say about it. But that's fine. The idea with this, and at least in the way I was thinking about it, is this should get better at the margins. On the days where we have a high spike in traffic, those are the days where the database is actually working hard. They shouldn't make the normal throughput of the application that much higher in the regular case; it's for those outlier instances. To that end, though, I did analyze it. And so the average response time got 2% to 3% better in that week-by-week comparison, which was fine. The 95th percentile response time, so starting to get out to those margins, starting to get to the long tale of where stuff gets -- a couple of requests came in at the same time, and the application had to try a little harder, those got 8% to 9% better. That shape of improvement where for most requests, nothing really changed for some of the requests that used to be a little bit slower; those got a little bit better. That's the shape of what I would hope to see here. And it remains to be seen. This application has particular traffic patterns where they'll encourage a lot of users to be using the app at the same time. And historically, those have been somewhat problematic, and we've had to really work to shore up the performance in those cases. That's where I'm really interested to see how this goes. It would be hard to replicate those traffic patterns at this point. So I don't have a good way to really stress test this, but my hope is that for those cases, things will just hum along and be happy. STEPH: That makes a lot of sense and something that would be hard to measure, but the fact that you already see a little bit of improvements that's encouraging. CHRIS: But yeah, certainly, if I get a chance to see what that looks like in the near term, I will respond back and let you know how this has played out. But overall, now the configuration seems pretty stable. I think we're in a good spot. Hopefully, we won't have to do too much proactive management around this. And ideally, it just buys us a little bit of headroom. So that is certainly nice. But with that, with your wonderful question getting to the heart of the issue, I think that wraps up the saga of the database switching. STEPH: Well, I appreciate you sharing that saga. That's really helpful. I've been very excited to hear about how this goes because I haven't gotten to work on a project that's going to use database switching just yet. And now I know all the inside baseball. I'm trying to use sports metaphors here as to how to do this for when I get to work with database switching. CHRIS: Sports de force. CHRIS: Along the lines of new stuff, there is something I'm excited about. So in juxtaposition to my earlier statement or my earlier grievance where friends don't let friends use dateselect in regards to trying to keep the web accessible, I do have some praise for something that's being added in Rails 6.1 that I'm excited about. And it's a really nice method. It's a query method that can be used to find orphan records. So if I'm writing a query that is then looking for some of these missing records, so if I have my table -- I didn't come with a great example today, so let's just say we have like table A and then we're going to leftjoins on table B. And then we're going to look for where the ID for table B is nil, so then that way we find where we don't have that association that it's missing. And so leftjoins does this for us nicely. And then I always have to think about it a little bit where I'm like, okay, I want everything from table A, and I don't want to exclude anything in table B if there's not a match on the two. And so then I can find missing records that way or orphaned records that way. The method that's being introduced or has been introduced in Rails 6.1, so anyone that's on that new-new, there is the missing method. So you could do tableA.where.missing and then provide the table name. So there's a really nice blog post that highlights exactly how this method works, so I'll use the example that they have. So for where job listings are missing a manager, so you could do JobListing.where.missing(: manager), and then it's going to perform that leftjoin for you. And it's going to look for where the ID is nil. And I love it. It's really nice. CHRIS: That sounds excellent. That's definitely one of those things that I would have to sit down and squint my eyes and think very hard, really anything involving left_joins otherwise center. Any joins always make me have to think and so having Rails embrace that a little bit more nicely sounds delightful. STEPH: Yeah, it sounds like a nicety that's been added on top of Rails so that way we don't have to think quite as hard for any time; we want to find these orphaned records, and we know that we can use this new missing method. CHRIS: On the one hand, I feel bad saying, "I don't want to think that hard." On the other hand, that's literally our job is to make it so that we encode the thinking into the code, and then the machines do it for us. So it's kind of the game, but I still feel kind of bad. [laughs] STEPH: Well, it's more thinking about the new stuff, right? Like, if it's something that I've done repetitively, finding orphan records is something I've done several times, but I do it so infrequently that then each time I come back to it, I'm like, oh, I know how to do this, but I have to dig up the knowledge. How to do it is that part that I want to optimize. So I feel less bad in terms of saying, "I don't want to think about it," because I've thought about it before. I just don't want to think about it again. CHRIS: I like it. That's a good framing. I've thought about this before. Don't make me think about it again. [chuckles] STEPH: Exactly. On that note, shall we wrap up? CHRIS: Let's wrap up. STEPH: The show notes for this episode can be found at bikeshed.fm. CHRIS: The show is produced and edited by Mandy Moore. STEPH: Thanks, Mandy. If you enjoyed listening, one really easy way to support the show is to leave us a quick rating or even a review on iTunes as it really helps other people find the show. CHRIS: If you have feedback for this or any of our other episodes, you can reach us at @bikeshed. And you can reach me @christoomey. STEPH: And I'm @SViccari. CHRIS: Or you can email us at hosts@bikeshed.fm. STEPH: Thanks so much for listening to The Bike Shed, and we'll see you next week. All: Bye.
CLICK HERE to sign up for a free trial of the Marcus Today newsletter including our daily STRATEGY PODCAST.Take a deep dive into whether cryptocurrencies should be considered an asset class worth having allocation for, find out how much cash and gold are currently held in the growth portfolio and engage in the debate over whether you should be positioning your portfolio for higher interest rates.Settle in and join Tom, Ben and Chris On the Desk this week as they discuss all of this and more.
CLICK HERE to sign up for a free trial of the Marcus Today newsletter including our daily STRATEGY PODCAST.Take a deep dive into whether cryptocurrencies should be considered an asset class worth having allocation for, find out how much cash and gold are currently held in the growth portfolio and engage in the debate over whether you should be positioning your portfolio for higher interest rates.Settle in and join Tom, Ben and Chris On the Desk this week as they discuss all of this and more.
Some brands are lucky enough to have a built-in audience of millions, while others need to develop an audience from scratch. Chris Mainenti has been on both sides of the coin and he knows that in either situation, once you have a base of potential customers paying attention to you, the next challenge is converting those browsers to buyers. Chris is the Director of Commerce Strategy at Discovery, Inc. where he is helping turn the millions of viewers who tune into Discovery’s channels such as HGTV, TLC, Food Network and more, into customers who buy across various platforms. On this episode of Up Next in Commerce, Chris explains how he put his history of building audiences at previous companies to work at Discovery — including some tips for young companies on how to utilize newsletters. And he discusses how to use the data you collect as a starting point for creating a more personalized, one-to-one relationship with your audience on various platforms. Plus, he looks into the future to predict how shoppable experiences will be made possible with universal add-to-cart and buy-now options. Main Takeaways:Developing Your Audience: Audience development goes beyond marketing. When you are building your audience, you have to know who you are as a brand and understand the audience you have and want to bring in, and what they want and need. In the early days of a brand, certain audience development strategies work better than others, including tapping into the power of newsletters.Lights, Camera, Take Action: Every company is collecting immeasurable amounts of data, which then needs to be sorted, analyzed and acted on. But the actions you take should be nuanced and applicable to the specific needs of specific audiences. For example, it would be wrong to lump together all of the women in your audience because a woman who is exploring your dot-com presence is likely looking for something different than a woman that is scanning a QR code on their TV. Those segments of women shop differently, and therefore should be approached in unique ways after the data tells you what they each want.Dreams of a Universal Cart Experience: Many believe the future of ecommerce revolves around the development of a universal cart experience. Every business wants to create shoppable moments and engage with customers across many different platforms. But getting to this nirvana means you also have to remove all the friction points.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 co-founder of mission.org. Our guest today is Chris Mainenti, the director of commerce strategy at Discovery Inc. Chris, welcome to the show.Chris:Thank you, Stephanie. I appreciate you having me on and talking all things commerce here in the current climate that we're in.Stephanie:Yeah. I am very excited to have you guys on. I was just thinking about how long Discovery channel, and all the other channels, HGTV, and Food Network and Travel Channel have been in my life and with that, I want to hear a little bit about your role at Discovery. I mean, it seems like there's so much going on, so many digital portfolios that you guys have over there, and I think just a lot behind the scenes that an average consumer wouldn't even know. So, I'd love to hear what you're up to at Discovery. What is your day-to-day look like?Chris:Sure. So, I would say, first and foremost, for commerce specifically in the digital media space, we're probably slightly different than a lot of others. We're really multifaceted in terms of how we work, and who we work with across the org. Obviously, like you said, Discovery is huge, has a ton of major, major worldwide brands. So, we actually sit on the portfolio wide level with our lifestyle brands, and we're really in the weeds with them on the day-to-day basis. And, that really starts with, obviously, our editorial teams. That's our bread and butter, that's our voice and our authority in this space. So again, that's really where we begin, and that's obviously where we're doing our content output, and producing all of this great shopping content for our different audiences, and again pulling our experts from all of these different brands to come together.Chris:So again, folks are really getting the full spectrum of expertise in all of these different categories. And from there, it just really starts branching out into other groups. So, we work heavily with our ad sales and branded content teams, where we work on much larger partnerships and deeper integrations which we can talk about today as well. We have a licensing team, where we work on licensed products, and we take our learnings that we're seeing on our shopping content on a day-to-day basis, and analyze that, and then speak with licensing to see where there may be some room to actually create a new line with one of our partners.Chris:We also, believe it or not, and I know you don't know this, we have a video games team at Discovery, and we work closely with them as well on trying to find those shoppable moments, and again bringing our brand and our voice into those games when they're being built. So again, we're always serving the reader no matter who or where they are, and again pivoting as necessary. So, those are just a few groups, and obviously our marketing and ops, and audience development teams were heavily embedded with as well when it comes to promotion.Chris:So again, there are just, I would say, a lot of areas that we focus on. I know in the beginning it was always all about, commerce is part of diversifying your revenue streams at a digital club. But, we see it more as now, we're trying to diversify our commerce stream into all of these other areas. So again, a lot of exciting stuff has already happened, and we're working on some cool stuff too as we head into next year. So, a lot of exciting stuff in an area that's obviously blowing up for a variety of reasons.Stephanie:That's a lot going on there. It's actually really interesting because you just mentioned video games, and I just did a recap episode with one of my coworkers for the first 50 episodes of this show, and the one thing I was bringing up was like, "I think there's a big opportunity in having shoppable moments in these worlds or video games." And, we were mentioning Unreal and Epic Games specifically, that I hadn't really seen that yet. So, it's interesting that you guys are starting to explore that arena, because it feels like that's something of the future, but it's needed, and that's where everything's headed.Chris:Yeah. And again, I can't stress enough. I mean, our portfolio is just so suited for so many of these different, avenues that we could always find something where, again, we're not being gimmicky just to say we're there. This is our bread and butter, and we're making sure that we stick to our tried and blue, into who we are, and not shy off too much, and again just try to say, "We did something here or there." Really making sure we're always serving our audiences and giving them what they want on the platforms they want.Stephanie:Yeah. Which I think that's a really good jumping off point, then because that was actually my one biggest question I had of how do you strategically think about what an audience wants without disrupting the content? I mean, it seems so tricky, because you see a lot of shows, and whatever it may be where you might have product placement in a show or a movie, but it might not actually uplift sales, because it wasn't done correctly. Where I was also just talking about the Netflix original, the organizing show where they partnered with the container store, and how they had an instant, I think was a 17% uplift in sales after that show aired. That worked, and many others don't. So, how do you guys think about making those shoppable moments, and actually having it work?Chris:Sure. First and foremost, I think, you have to be honest and say, "Look, not everything is going to hit." And honestly, it's not always meant to always hit. So, I think we go into that, first being real with the current situation, and understanding not everyone is going to want every single thing. We're always talking about integrating, promoting, so on and so forth. So, I would say that's first. Secondly, again, we start with, what's our expertise? What do we believe in? And, what do we want to showcase to our various audiences across all of these different platforms? And then, from there is when we start to really start getting down to the nuances.Chris:And look, we have created what we dub internally as the commerce hub, where we're bringing in data feeds from all different platforms, our affiliate networks, our in-house reporting platforms, social, so on and so forth, bringing that all together. And again, understanding, what are people consuming? And, what is their mindset when they're on social, versus linear, versus a DTC, or our dot-coms. And, really starting to look and pull out trends from that. I always like to say I prefer the term data influenced versus data driven, because you can't just take a dashboard of data, and sort in descending or ascending order, and say, "Okay. Whatever is at the top or bottom, do or don't do." And, call it a day.Chris:We focus much more heavily on insights, and use that data as a jumping off point, but then do very, very deep analysis, and pull actionable insights out of that for all of our different brands and teams for when they're creating new content, or when we're optimizing old content. Again, wherever that is. And then, I think lastly with that comes, how do we visualize that to the audience. On digital.com, is it more about, again, really simple to read, simple call to actions to buy items. Again, on linear, what is that? A QR code experience? Is it some type of more deeper integration with a smart TV company on our TV E experiences? Is it more deeply integrated where you can actually tap to purchase within the app? So on and so forth.Chris:So again, there's just a lot of things that we're looking at. We never make it cut and dry, that's probably because personally I don't think anything is ever cut and dry, especially this space and shopping behaviors across, not only brands but the platforms those brands are on, and that's how we look at it. I know that's a lot, and that sounds a bit crazy, but we do really pride ourselves on, again, using these things as a jumping off point and then really diving in deep and making sure that we're serving our audiences, again, where they like to consume this content.Stephanie:Got it. Yeah. It sounds like everything is very custom, and every channel and project you start from scratch where you start figuring out what your audience might like. But, do you have any internal formulas where you're like, "Well, we always follow this in the beginning." and then, it goes crazy after that, because we find other things out. Is there anything that's similar among all the campaigns or projects that you're working on, at least from a starting point?Chris:Yeah. I think, honestly, it's probably not surprising whenever you're talking about items on sale, or whenever we're talking about certain merchants, or price points, or categories, like organizing and cleaning is always up there for us. We know very specific furniture categories that do very well for us. So, we do have our basic what we call playbooks that we start off with, but like you said, we still are always constantly learning and pivoting as necessary. I think a perfect example is in the beginning of the year, I don't think anyone in this world saw what was coming, so we were doing our thing, and then when everything started to unfold, we got together and we had to pivot. And again, the good thing about Discovery's brands is, again, we are so widespread in terms of the categories that we're experts in, that we were able to easily pivot and, again, make sure we're giving our audiences what they need at that moment.Stephanie:Do you see more companies starting to shift? Like media companies turning into ecommerce companies, and ecommerce companies turning into media companies. I've heard that saying quite a bit, especially over the past six months, but it feels like you guys have been there for a while. Do you see other companies looking to you for maybe best practices of like, "How do I make this shift?" Or, "Should I make this shift?"Chris:100%. I think, the beauty in that is that we can coexist and really do things that benefit each of us. I don't think this is an either, we succeed or they succeeded. This is, I think a space where we can coexist. The way I always like to frame this when I'm talking to our merchant partners, and talking internally, is we're really here to humanize the star review. When you come to us, you're not just going to see, again, this is a four out of five, or this is a five star, item, and that's it from the random ecosystem of the internet. We are heavily focused on saying, "Look, here are the things we recommend, and why." And, I think that's where our partners can really leverage us, and where you're really seeing us shine. Again, we don't have to just throw a bunch of random stuff out there and hope for the best.Chris:Again, given our brands and our standing in this space, we can really leverage our expertise and authority there when growing this portfolio with all of our partners. To be honest with you the thing that drove me to Discovery the most was, "Wow, these are huge brands, with huge audiences, and huge respect. Now, we just got to tie all of that together, and go from the moment of inspiration to action." And then again, that's what we've been working on.Stephanie:That's really cool. With all the data that you were mentioning earlier, since you joined have you seen any changes in consumer shopping behavior?Chris:So, yes. Obviously, the biggest one occurring this year, and that was with online grocery. I think it's no surprise that it's been building up now for a year or two in terms of mainstream, but it never really caught on. It's only a five to 10% of folks are really engaging and entertaining the online grocery space. But then again, obviously, earlier in the year when things started to shut down, and people were uneasy about going out, we did see huge spikes in that space, obviously, on our FoodNetwork.com site. And, I would say that continued for a bit, and did peter out a bit recent months which, again, is obviously expected. So, I think that's probably one of the big ones.Chris:The other thing that we have seen, not so much in terms of major shifts in shopping behaviors, just more increased sales in categories that we already know are performing. So, organizing and cleaning is always been a winner for us, and then as the months went on, we've just seen it doing better for us. I think we do a lot of buying guides where we talk about the best cast iron skillets on Food Network, or the best humidifiers on HGTV. We started to see those things gain more and more traction as we went, and we're attributing some of that to us really getting our audience to trust us, and now know that they can come to us as a trusted resource to really be a personal shopper for them.Chris:And again, we've seen that across the board in all of our main categories. The only other thing I'll say in terms of, not only, I wouldn't say shifts in behaviors, but just something else we've pulled out from the data is that, everyone loves a good deal and good price points, but our audience is willing to spend more, especially when those items are either offered at a discounted rate for a holiday or something, or if we've worked with the merchant to get an exclusive discount for our audience, so we have also seen uptakes in that as well. But again, holistically, we haven't seen any huge shifts outside of, like I said, the online grocery, which again is expected given the situation we've been in.Stephanie:Yeah. That makes sense. Yeah. I saw for the Food Network, I think you had a subscription platform and you partnered with Amazon. Was that something that was already in the works, or did that get sped up once everything was happening with COVID?Chris:Yeah. So, that was already in the works with our DTC group, and for folks who don't know that's our subscription platform on the Food Network side that we call internally FNK, because it's just easier. And yes, that was in the works, and again we're working more and more in getting that to more and more folks who are really looking to get more classes, get more recipes, just be more intimate with our brand. Stephanie:Yeah. It looked very cool. I was on there looking around at, "Oh, you can follow these chefs and have cooking classes with them, and then you can tell your Amazon Echo to order it for you the exact things you need." And, it looked like it would be really fun to engage with that.Chris:Exactly. It goes back to that 360 approach that we have really been focused on, when it comes to our shopping portfolio.Stephanie:Yeah, that's very fun. So, you've talked a lot about partnerships where you've touched on a bit. But, tell me a little about what does a partnership look like from beginning to end? What does that process look like when you're finding a partner, figuring out how to actually strategically partner with them in a way that benefits both parties? What does it look like behind the scenes?Chris:Sure. So, I think there's really two paths there, there's the partnership stuff that we handle directly with merchants through affiliate networks, and so on and so forth. And, for that we do a lot of research on our end, again we already know what type of product hits, what type of merchants hit. So, one thing we do is take that and then say, "Okay. What are similar merchants in this space?" And then, we'll reach out and discuss the opportunity of working together on that front. And then I would say, on the other side, bigger picture stuff is, again, we're heavily embedded with our ad sales team on much larger partnerships.Chris:And, I think a great example of that is our shop the look campaign with Wayfair, which is a deep integration that spans across linear and digital that, again, was really spearheaded by our sales team that we then came in and assisted with. But, for folks who don't know, basically what this is, when you go to any of our photo inspo on hgtv.com, you'll see a little flyout of all the products within the image that are shoppable on Wayfair.com. And obviously, that's not just a basic integration that you just wake up one day and do. So for that, we came together and we've said, again, "What can we do that is going to benefit both of us, that's going to serve our audiences for the long run, and really make a successful integration here?" So again, that's what turned into shop the look.Chris:It's one of our best partnerships that we have across our dot-coms right now, and it's super successful, our audience loves it. And again, I think It's always starting with, "Well, what is the goal? And, what do we want to achieve from this?" I think sometimes people get too focused on, "What looks cool?" And like, "Let's just do that." We wanted to really focus on, "Well, what's the goal here?" And, what do we think we can create that's actually going, again, to help our audiences that come to hgtv.com be inspired and feel comfortable, making purchases based off of what they're seeing.Chris:So, that's really how we approach these, we're super particular about who we work with, and what that looks like. You mentioned the Amazon partnership, we have a really strong relationship with them as well. And for us, again, it's always looking at the brand and our audiences first and saying, "What makes the most sense for them?" And then, that's when we start peeling the layers here, and figuring out what are those experiences that we could bring to them on different platforms.Stephanie:Yeah. I think that's really smart. Like you said, not to just do something because it looks cool or seems cool, but actually do something that you know the audience will like, and will convert into sales to also help the partner. What are some of the success metrics for the shop the look campaign for example? What did you go into hoping to achieve when you set up that partnership? Is it affiliate based, or what do you guys look for and be like, "Oh, this is a successful campaign versus the previous ones that were maybe okay, or good."?Chris:Yep. So, I think just simply put it, consumption and sales are the big ones. Consumption being, are we seeing more and more folks coming to these different integrations across our platform, and then again how are they translating into sales? Looking at things like, "Okay, so we are getting them to Wayfair.com, but once they're on Wayfair.com what are they doing?" So obviously again, looking at conversions, average order value, so on and so forth. Again, just to really gauge what these audiences are looking like, as the days, weeks, and months go by. I would say, one of the things that we were looking for, especially as COVID first hit was, "Are we seeing an increase, a decrease? What are we seeing in terms of shopping behaviors across our platform?" And again, the metrics we looked at for that was, obviously, click through rates, conversion rates, average order value. Because we even saw in some instances where experiences weren't driving as many views or clicks, but the average order value was much higher.Chris:And again, just goes to show that our audience is a very qualified audience that trusts us, and is willing to spend with us. So, we try to pull out all of these different metrics. I think one of the things with commerce that is either for better or worse, is that you can't just look at one metric and just live and die by that number. So again, that's why we have a handful. And look, we also pivot based on what that platform is, what the experience is, who the partner is, so on and so forth. So, we don't have a one size fits all solution, again, that was done by design. And, that's how we approach these things. And again, just making sure that we stay true to who we are, and we're benefiting everyone involved.Stephanie:Got it. How do you keep track of, if there's a TV viewer who's watching HGTV, and then you're trying to send them to maybe Wayfair to shop that look like, what are the best practices with converting those people, but also keeping track of them in a way that's not maybe creates friction? Are you telling them, "Go visit this URL."? Or how do you go about that?Chris:Yeah. So, totally right. I think, obviously, the most common ways of driving from linear to digital is the QR code experience. And, we're actually working on some of those solutions as we speak and trying to understand, again, what will it take to bring more linear folks from TV down to digital, and like you said, make this a frictionless seamless experience? So again, is that as simple as a QR code, or again is this more about a stronger deeper integration that's a bit more sophisticated and partnering up with folks who can actually understand what is on screen at any moment, and then surface that product on screen.Chris:Again, if you have a smart TV and allowing folks to enjoy that experience, or again, when it comes to TV E we have our go apps that you could log into with your cable subscription. And again, obviously, it could be more sophisticated on your mobile device. So, what does that look like? Is it again, while you're watching it at minute three or whatever, five minutes in, do you surface what is currently being seen in the screen and saying, "Look, shop this room?" And, what do you do from that point down to the device. Can it be as simple as just a tap to buy, or do you have to tap and then open up a new browser window? What do those integrations look like? Again, ultimately trying to find the most frictionless experience. So, I think we're still experimenting with that. I don't think anyone in this space has really nailed that down in terms of what is shoppable TV, or just shoppable video in general? And again, how do we go beyond what just looks cool and turn that into actionable?Stephanie:Yep. Yeah, I think creating a frictionless experience is key, and there's a lot of room for innovation in that area. I'm even thinking about just Instagram, where I'll find a blogger I like and I really like her outfit, and then it's like, "Okay. Well, now go to the link in my bio." And then, that's going to open a LIKEtoKNOW.it app, and then maybe you'll be able to find the outfit. But at that point, it's probably just on the home screen if that new app. And, it just feels like there's so many places for a customer to drop. I guess I was just really eager to look at that outfit, so I stuck with it. But any other time, I probably would been like, "Oh, that's too much work." It seems like there's just a lot of room for innovation around this shoppable moments, whether it's TV, social, video, audio, anything.Chris:Yeah. I mean, I think you nailed it right there. I think Instagram is a perfect example, and that's a platform we're looking at as we speak, and we have some ideas around that as well. Because like you said, our goal here is to, how do we cut out all of these extra steps that are unnatural? Normally, when you see a product you like, you want to be able to say, "Okay. Great. Let me buy that." Not let me go to a bio, let me click this link, let me wait for this page to load, let me do that checkout experience is completely different from the platform I was just on. And then obviously, you're playing around with browser settings and everything else.Chris:So, I think you're spot on, and again that's something we're heavily focused on, again, literally as we speak. And, what does a more integrated Instagram shopping experience look like for Discovery and our partners? So, there's going to be more to come on that soon. But, we are thinking about that, and trying to find, again, these ways to make it as frictionless and seamless as possible. Again, no matter where our audience is consuming our content.Stephanie:Yeah. Well, it seems like if anyone can figure it out, it would be all because it's not like you're trying to put your products on someone else's show, or having to utilize someone else's platform. You have your own platform, you have your own shows, you can build new shows, and try out different ways to influence. There's shopping behaviors. That seems like there's just a ton of opportunity for you to experiment with everything that you all have.Chris:Yeah. No. A 100%, and those are these ad conversations we're having with a lot of our partners as well, and understanding from their world how they see it, and then bringing our world into that, and marrying that together, again, so we can coexist here, and at the end of the day just create a better experience for our viewers.Stephanie:Yep. Love that. So, what are some of your favorite platforms that you guys are experimenting with right now? You said, you were looking into Instagram, but what's really performing for you, and what are some of the more moonshot platforms that you're trying out, and you think it will be good, but you're not so sure?Chris:Sure. Yeah. I mean, obviously, the bread and butter is our shopping content on our dot-coms, those are our top performers. But, I will say some of the more areas of interest, again we already spoke about Instagram. But, another one where we are seeing some really good traction, believe or not, is in the Apple News space, most notably on Food Network. We're getting a lot of traction on that platform, and seeing what our audiences are resonating with the most on Apple News, which I again I know it maybe a shock to some folks, but I think-Stephanie:Yeah. So, tell you more about that. I mean, I have an Apple phone, but I have not opened up Apple News probably since I got the phone, so tell me more about, what are you guys doing there?Chris:Sure. Yep.Stephanie:Because you're the first person who said this.Chris:Okay. All right. Again, understood I know that's not always the first thing that jumps into someone's mind when you're talking about commerce, and lifestyle brands, especially because they name Apple News. But again, I know you don't really use it, but again this is just the basic free version that's included with your device when you get it. And again, we're syndicating our day-to-day content onto that platform. And, we've built really strong audiences across Apple News. And again, it's a similar experience to our dot-coms, just slightly different because it has to fit obviously the specs of the Apple News platform. But again, we just have seen some really strong successes in different areas, again most notably in the buying guide space, or sales events that are happening, and dabbling with pushing notifications for that.Chris:Obviously, with some of the recent shopping events that occurred, we built a push notification strategy around that as well, and it did really well for us. So again, I think that's one of those ones that is also intriguing to us. But I think, again, the high level, we really are trying to be everywhere it makes sense, but also really tailoring our content and strategy based on what that platform is. So, for some of the stuff that's working on Apple News may not make sense for Instagram or vice versa, so on and so forth. So I think, again, those are two areas. And I would say, the last thing that we're really, or me personally is really intrigued by, is this universal cart experience/straight to cart experience that more and more folks are dabbling with. There's a handful of platforms out there that can help publishers do this.Chris:And for folks who aren't familiar with this, it's basically saying, if someone comes to HGTV, or FoodNetwork.com, or tlc.com, and they see an item they like on there, instead of saying, "Buy now on X merchant site." And getting thrown off to that merchant, you could hit buy now, or add to cart, and you could actually check out within our platform, which I think is definitely going to be a big piece of the puzzle for the future of commerce on digital publishers. I think the big question will just be adoption, and then what does that look like. I think, again, Discovery is in a perfect position for this, because folks are already coming to us for this expertise, and know and love our brands already. So, there won't be a lot of convincing in terms of like, "It's okay to check out with us as well."Chris:But again, we're anticipating some shopping behavior adoptions that are going to occur during that process. But again, I think that's an area where you really start to open up a lot of new doors here when it comes to shopping for digital media sites. And, I think that's when it gets even more exciting for deeper integrations with Instagram shopping for example.Stephanie:Yep. Yeah, I love that. I mean, I'm excited to look into the Apple News more. And, I was just intrigued by that, because I like hearing things that others have not said yet. Because I'm like, "Oh, that means there could be opportunity there if you know how to work with the platform." Especially, if you can set up a push notifications. That's huge to make it in front of Apple users. And then yeah, I completely agree about the being able to shop instantly from a page. We just had the CEO of Fast on, Domm. And, I thought it was really interesting how he was talking about how every website should have buy now buttons under every single individual products, and he went into the whole thing of, "You actually will have higher conversions." Because of course, I was like, "Well, then you have to get past the minimum shipping amounts, and maybe higher order values, if you let me add stuff to a cart." And he said, "Based on everything they've seen, people will buy more if they can buy it instantly." And, it'll batch it in the background and ship it out after the fact, all together. So-Chris:Yeah.Stephanie:... I think you said it.Chris:Yeah. Convenience is key. I mean, everyone likes convenience, and again that's our hypothesis as well here, that we do plan to see increased conversions by building a more intimate shopping experience across our dot-coms with a lot of our partners.Stephanie:Yeah, that's great. So, the one big topic I also want to touch on was about audience development. So, when you guys, you have these huge audiences that you can tap into, but for especially a smaller brand, I want to hear how you all think about building that audience to then eventually being able to sell some products to them as well. What does that process look like? And, how can a new brand do that?Chris:Sure. So, I think first and foremost, I think it's important to understand what is audience development as it relates to your brand and organization. I think the biggest misconception with the term audience development is, "Oh, yeah, it's just another word for marketing." But it's not, and this has been written about it as well. And, I think the easiest way to think about this just in a very basic form is, marketing is more about how you want to look to the world as you bring those audiences in initially. More on the branding side of things, whereas dev is now like, "Okay. So, who are we to the world?" And, really drilling down on understanding those audiences that were brought in and who they are, and then building those audiences through different engagement tactics and community tactics.Chris:So, I think that's always a good place to start, to understand how those two worlds kind of then meet. And then once that happens, to answer your specific question, again start with understanding who your audiences are, and where they are. I think sometimes and probably not so much now, but in the past when I was first getting into this space, I think a lot of people just thought that, "Well, content is content. It could be put anywhere, and it's going to work the same way everywhere. Obviously not the case, even more so for shopping content, and behaviors. So, it's really, again, drilling down and pulling out insights based on, "Okay. Who is my Facebook audience? Who is my newsletter audience? Who is my Apple News audience?Chris:And, really starting there, and once you understand high level who they are, what they like, what they're consuming. More specifically when you talk about newsletters, what type of keywords are working to increase open rates, and so on and so forth, then you could start drilling down on the specifics. Saying like, "Okay. High level, here are the different topics and content archetypes that are working, now how do we build out an editorial calendar with that in mind." Again, with the understanding that we're not just going to set this and forget this across the board. What this looks like in newsletters is going to be slightly different than how we're positioning it on Facebook for example, and so on and so forth. So, I really think that's the key right there, and using data to your advantage and saying, "Okay. Well, here's all the different metrics that we're currently compiling, which ones can we look at, and pull from to better understand what these audiences are coming to us for." And again, working with your editorial teams, and the branding teams to bring that all together and say, "Okay. Now here's the plan for output."Stephanie:Yep. Got it. So, if you don't have an audience, and you're starting really from scratch, where would you start? Because I read quite a few articles, maybe from your past life at other companies about you increasing conversion rates by 60%, through maybe newsletters or increasing newsletter subscriptions? Is that maybe a place that you would start? Or where would you recommend someone brand new, who's like, "I don't really have an audience. I have five followers on Instagram."? What's the best way to acquire an audience and then keep them around to build it?Chris:Yeah. So I would say, if we're talking about limited resources and funding, I do think newsletters are a great place to start. And that's really because, it gives you an opportunity to have this one-on-one intimate relationship with the folks on the other side that for the most part you're not having to be held against what the algorithm is going to decide to show at any given day. Obviously, you have to worry about, spam and junk mail and things like that. But for the most part, if you're running a really clean newsletter list or lists, you don't have to worry about that so much. So, I do think, starting in the newsletter space is a really low budget, friendly way to start growing audiences, and it's really great to use as a gut check to see what is resonating. You could look at your open rates, you could look at your click to open rates.Chris:Again, you can monitor what the churn is and stop to see if what you're producing is causing people to drop off for good, so on and so forth. So I do think, for publishers where it makes sense that is a great place to start. You can obviously acquire new users through a bunch of different audience development tactics, whether it's on site widgets or modals, or do some small paid spend to try to bring folks in, and do the sweepstake partnerships as well. Again, obviously I'm a little biased, just because that is part of my background. But again, over the years, newsletters, again, I know they're not the sexiest platform to talk about, but they have been the most consistent in terms of performance and really bringing your most loyal and engaged users from that platform.Stephanie:Yeah, I completely agree. And, you also get access to quite a bit of data that you don't on other platforms, and if you can figure out how to properly engage with them, you could have newsletter subscribers for years to come, which is everyone's goal.Chris:100%. Yeah. And, I think even to take that one step further, you could even start to get more and more personalized where you get to a point where you're launching a newsletter to half a million people, and no two newsletters are alike because it's all based on past user behaviors that you were seeing within email and the dot-com, and again adjusting that based on different predictive intelligence tools. So again, I think 100% there's a lot there, and if done correctly, and go a long way. I mean look, this has been tried and true in the space. We see a lot of folks who start there, we're even seeing in the news media space a lot of journalists, and editors, and things like that backing off from the larger brands, and going this newsletter route to get their word and opinion out. So yeah, I think email is here to stay, and it's going to be a huge piece of the puzzle moving forward.Stephanie:Yep. I agree. So, you've been in the media world for a while, I think I saw at least back to 2012, maybe even before then.Chris:Yeah.Stephanie:I went as far as I could on your LinkedIn, I think it cut off.Chris:No, you got it. Yeah. I have been in media basically since the day I got out of college. So-Stephanie:Okay. Well, this is the perfect question for you then. What do you think the future of online commerce in media look like? Maybe in 2025 or 2030, what does that world look like?Chris:Yeah. So, I think it's going to be an extension of what we talked about a little earlier about this universal cart experience, and turning digital publishers into this space where audiences can come and also feel comfortable making those purchases. And again, not being bounced off to third party sites, and really being able to start building an even stronger shopping relationship with your audiences, because again with a universal cart experience, also comes a lot more first party data where you could, again, focus on more one-to-one relationships with your audiences, again, specifically in the shopping space, which I think is key.Chris:And, I don't foresee a place where merchants are going to have a huge problem with this, because, again, you're just helping to legitimize their product. Like your previous guest said about increased conversions. I think that's another huge piece of this puzzle. So again, it's really just now, again, bringing this all together, this whole 360 approach and saying, "Look, you're not just coming to us for flat inspirational content, you're now coming to us for the inspiration, and the ability to take action immediately." Again, versus being bounced off to one, two, three other platforms depending on which platform you're on, like your experience with Instagram.Stephanie:Yep. Yeah, I love that answer. Really good. So, now that we're talking a little bit about the future, what do you not understand today that you wish you did?Chris:What do I not understand today that I wish I did? That's a that's a good question. So, as it relates to commerce?Stephanie:Yep. Or the world, where you're like, "I really just wish I knew more about this." But yeah, it could be a commerce one, that would be cool too.Chris:Sure. I would say, I think not so much about not understanding this, but more not understanding why it's not better. And, that goes back to, I would probably say, affiliate data, and what that data looks like, and what partners have access to, or don't have access to. Obviously, being a part of many different networks, and merchants being on all different networks and so on and so forth, it becomes, quite difficult to manage all of that data coming in, and really having a platform that can easily bring this all together in a unified way. We do have a really strong partner that we work with to aggregate a lot of this data. Again obviously, it's never going to be perfect, because you're pulling it from all different places, and you have to understand, "Well, how does this platform leverage conversion rates and click through rates, versus this platform?" And again, just like, "What do those measurements look like?" And, the methodology behind them.Chris:So, that becomes challenging. But, I do think that's probably one of the biggest things that I just wish. And, I know it's not easy, hence the reason why it hasn't really been done yet. But, finding a more universal way to bring all this data into one data warehouse. Again, we were working on some stuff along those lines, but just high level, just generally speaking in this space, I do think that's one of the more challenging situations that a lot of digital media folks are in when it comes to with the shopping space.Stephanie:Yeah. That's a great answer. It does feel like a lot of technologies in general started out in that way. Very chaotic, things are everywhere, data is everywhere, and then things eventually end up in a dashboard, or it starts coming together in a more useful way. So, I hope that world comes to be in the future as well.Chris:Yeah. I mean, look, at the end of the day, that's only going to help all parties. It's going to help the audience, it's going to help the media company, it's going to help the merchant, so there's definitely reason to really get this right. But again, then, to do a bit of a 180, I think that's why you're going to start seeing these universal cart experiences take off more and more, because it does make that a bit cleaner in terms of what you're going to have access to and when.Stephanie:Yep. Very cool. All right. So, we have a couple minutes left, and I want to jump into the lightning round, brought to you by our friends at Salesforce Commerce Cloud. They're the best. This is where I'm going to throw a question in your way and you have a minute or less to answer. Are you ready?Chris:Let's do it.Stephanie:All right. What's Up next on your... Well, do you have Netflix? I would say Netflix, and I'm like, "He's going to be like, "No.""Chris:I do.Stephanie:Okay. What's up on your queue? And then, you can also tell me what's up on your Discovery queue?Chris:Fair. So, I'll start with us first.Stephanie:All right. Go ahead.Chris:And, I think this is so obvious, but huge 90 Day Fiancé fans. And, I will say my wife actually started that. I wasn't always, but she was like, "Come on, we got to watch it." And, this was a couple years ago. And, once I started, we have been heavily invested ever since. So, from a brand standpoint, we're 90 Day through and through. So, I think again-Stephanie:I like it.Chris:Yeah. Probably obvious to a lot of folks just because of the success of it, but that is our thing there. And then, she's also actually a huge fan of Discovery ID, it's her favorite channel by far. So, we got both ends of the spectrum there, right?Stephanie:Yep.Chris:Discovery ID, the DLC. But again, that just goes to show the strength of our portfolio. And then, on a personal front, I would say, what we're actually currently watching is the Borgias on Showtime. If you haven't watched it, I highly recommend it. But, it's three seasons, so that's good for me. I'm not a huge binger, but I can get through a three season watch, so we're currently in the middle of that.Stephanie:Cool. I have to check that out. Yeah. 90 Day Fiancé, so I have a twin sister, and she's obsessed with that show, and she's been telling me I need to watch it. And, I've been like, "No, I'm not watching that." So, now that you say you also enjoy it, maybe I'll have to want to check that out.Chris:Yeah. Come on. It's only fitting now. You got to at least give it a shot.Stephanie:Yeah. I think I will after this. That'll be the rest of my day.Chris:Perfect. So, I've succeeded tonight.Stephanie:You did-Chris:I converted someone.Stephanie:You can tell everyone, "I got a conversion."Chris:Exactly.Stephanie:What's Up next on your reading list?Chris:On my reading list. So, this is also probably slightly depressing, but I'm actually currently reading the Plague.Stephanie:That's [inaudible 00:49:47]. I mean, I don't even know what that is, but I'm like, "No." I mean, is it good?Chris:Yeah. I mean, so far, I'm only maybe a quarter of the way in. it's just eerily similar to the situation we're currently in, and obviously this was not written recently. This is old Camus. But yes, so that that's what I'm currently reading. So, not exactly an uplifting read, but I do think interesting to say the least in seeing some of these parallels that, again, just six, seven months ago we thought were just crazy things you would read or watch on Netflix.Stephanie:Yeah. Well, if you enjoy the full read, let me know, maybe I'll check that out.Chris:Will do.Stephanie:Next up, if you were to have a podcast, what would it be about, and who would your first guest be?Chris:That is interesting. If I had a podcast. For me, I think I probably wouldn't fall into the current podcasting world that pulls a lot of talent from different areas, and makes that the centerpiece of their podcast. I would much rather try to get in the weeds with folks who are making a difference on a local level. I think especially in this political climate, I think that sometimes gets lost that we think it's only the top that matters, and nothing lower does, which I think is completely false. I think everything starts at the local level. So, I would love to give more exposure and light to those folks who are doing the dirty work on the ground which, again, sometimes gets lost in the standard media cycles, or across social media for example.Stephanie:Yes, I love that. It's also something we're exploring here at Mission is local level podcasts, because I think that's what people are leaning into now. They have lost that also a sense of community with everything that's been going on, and you might want to know what your neighbors or community is up to, and also what they're doing, like you said, on the ground level. The next one-Chris:100%. I think it's super important. Go ahead.Stephanie:Yeah. What does the best day in the office look like for you?Chris:The best day. So, when that was a thing-Stephanie:When you went to the office, and you weren't just in your house in New York.Chris:Exactly. Honestly, the best part about that is, being able to... And, now I feel it even more, is having that change of scenery, and being able to have those face-to-face interactions with folks. I recently read a study where, I think it came out that people were actually working longer hours, and having more meetings, while working from home, because they don't have those passerby conversations in the hall, or going in and out of the restroom, and so on and so forth. Which, again, I don't think people appreciate until it's gone. And for me, that's been a huge piece of the puzzle that's been missing during these times is that, human interaction. I think everyone wants to think that working from home is the future, I'm just not sold on that yet.Stephanie:Yeah. I think the flexibility, maybe, but I think a lot of people are eager to get back and see their coworkers, and have coffee together and whatnot. So, there'll be pent up demand, as economists would say.Chris:Exactly.Stephanie:All right, Chris. Well, this has been such a great interview, where can people find out more about you and all the fun work you're doing at Discovery?Chris:Sure. So personally, you can find me, Chris Mainenti on LinkedIn, and we can connect there if you'd like to chat further. But more importantly, if you love our brands, you know where to catch us on TV. And then, similar to dot-com, HGTV, Food Network, TLC, Travel Channel. We're everywhere and we look forward to continuing to serve our audiences wherever they are, and really helping them through these trying times that we're all in.Stephanie:Yep. And most of all, go watch 90 Day Fiancé, everyone. I mean, I feel like you need that fun.Chris:Exactly. For the handful who haven't yet, including you, obviously.Stephanie:Yeah. I know. Such a veil. All right. Thanks so much, Chris. It's been fun.Chris:Likewise. Thanks so much again. Bye-bye.
Nick Carse has built a FROZEN empire! Find out how the King Of Pops Co-Founder did it... on C-Level YouTube - Chris DeBlasio= http://bit.ly/ - Chris DeBlasio= : http://bit.ly/2Zi0fJH Instagram- Chris DeBlasio= : http://bit.ly/2Zirnsg IMDb- Chris DeBlasio= : https://imdb.to/2ZnBUm5 Twitter @Chris_DeBlasio = : http://bit.ly/2ZcDdUw Website- ChrisDeBlasio.com = : http://bit.ly/2Zepz3m LinkedIn- Chris DeBlasio = : http://bit.ly/2ZcxCh4 King of Pops: Facebook: @KingOfPops Instagram: @KingOfPops Instagram: @NickCarse - You know what's interesting. So you take your failures. - Yup. - Or what you think is a failure, right. Because I don't actually love all of our pops. - Right. - And you put that out there to the world and it is somebody's favorite pop. - [Chris] Yes. - And they're gonna remember it forever. - Yup. - And so, it's kind of like, I don't know, in your industry, a bad movie or a bad advertisement that you think, like, "We went the totally wrong way with that." - Right. - Someone is gonna remember it and quote it forever. - [Chris] On this episode of C Level, I'm chilling with the king himself, Nick Carse, co-founder of King of Pops. - I'm super excited about this episode, because it focuses on a lot of people that, they have a career already, and they have a business idea, and making that decision that, you know, making that decision to actually go after their passion. - Yeah. - But for the small people, the small amount of people that don't know who you guys are,
How do you get things around the world quickly and safely? Answer: Have a good team! - [Chris] On this episode of C Level I talk with Brian Oxley and Enrique Alvarez of Vector Global Logistics. So tell me a little bit about you guys and your business. - So, my name is Enrique Alvarez. I'm originally from Mexico city. I came to the US in 2004 to study B-School. I went to Wharton, Philadelphia. Graduated in 06, and then came down to Atlanta to work for the Boston Consulting Group. That's where I met Brian. We were both doing consulting for almost three years, where we wanted to start something on our own. We thought about different projects and different potential ventures, and we looked into logistics, and for us, logistics was a very interesting industry. - So why logistics? What interests you the most? - Well, after conducting a couple of weeks of due diligence, and just interviewing some people, and really getting to know the industry well, after a project that we did for a company down in Mexico, we realized that the industry was very fragmented. There's a lot of mom-and-pop shops out there. There's a lot of large international companies that are doing logistics, but even those big players are not, uh-- don't account for a lot of the market share in the industry. So it was very fragmented. The other thing that we found is that the economy wasn't very good. It was really a lot of companies going under, unfortunately. So, time-wise, we thought that that could be an opportunity. And, I guess I'll take a step back, and I'll just tell you a bit more about what our company is, and what kind of industry we're participating in. I mean, we're an NVOCC, which is a Non-Vessel Operating Common Carrier which is a logistics company, an international logistics company, and what that basically means is we have contracts with a lot of different suppliers, a lot of different contracts and contacts with agents around the world, and we're shipping ocean containers for our clients. So, someone calls us and tells us that they need to ship 10 containers from Savannah, Georgia, to Nigeria, Lagos, and we not only coordinate loading the container, making sure the container gets there on time, making sure that it's loaded in the two hours that we have, but then also making sure the container returns to the port, goes to the other end of the world, and then we do the same thing at the other end of the world with our agents. - I can't imagine how difficult it is. I mean, I can't even plan a company party with my office, let alone, like, shipping something across the world, so-- - When we got into it we found-- in looking at different opportunities beyond logistics, we found that logistics was a good opportunity for us because, as Enrique started to mention earlier, it was, you know, very fragmented, a lot of smaller companies, it was kinda like the Wild West where people were moving freight, doing whatever they wanted to do, but their mindset, what we found in the industry, is just people don't-- people did it okay. They didn't do it well. They didn't communicate to the customer and be proactive, and the freight companies would try and price gouge the clients where they would try and charge an exorbitant margin. They were trying to maximize their margin on each and every shipment, versus thinking about the long-term value of the client. And, for us, when we got into the industry that was our approach, right? And coming from our roots of BCG, it was all about thinking about the long-term value of the client. And, so we don't wanna ship with that company for this shipment, or the next shipment, we wanna ship with them for the next-
This is the life and business advice that the Dr. ordered - [Chris] On this episode of C Level, I talked with Doctor Shelton Goode, President and CEO of Icarus Consulting. - So Shelton, thank you for having us come out. I know a little bit of your background and today, we're gonna be talking about diversification of workplace and team building and stuff. - Right. - And I wanna hear it from you. So, how did you get-- Where did you come from, grew up, how did you get started, how did you get into all these? - Okay, so, let's go backwards. - [Chris] Yeah. - Let's go to backwards. So I'm currently the CEO and president of Icarus Consulting. Icarus Consulting is a veteran-owned firm, and we specialize in human resource management consulting. - [Chris] Okay. - But our superpower is helping companies recruit in a very competitive landscape. Make sure that they get their share of the talent. But we do some a little bit better than some other folks. We also concentrate for our clients on their current workforce. So many companies are so focused on getting you know, that talent in. - Right, right. - It's diverse, it's young, it's people of color, it's women, and everybody's so focused on that, that sometimes their current workforce feels like they're being overlooked. So we make sure that while they're trying to get that diverse talent from the emerging workforce, that they think about and focus on their current people. And then, once they do get that workforce, that talent in, that they keep it. - Right. - Because it's really competitive, and it's almost cheaper and easier to poach from other companies than go out and source for new talent so we make sure that companies have an inclusive workplace which we believe is the secret sauce to retaining employees. - Yeah, absolutely. And I love the fact that your current employees, right? That's important too. - Yes. - 'Cause you're bringing new talent and sometimes people that have been around for a long time, it's like, oh there's this new talent coming in, so making sure that they still feel as important.
If you're a regular listener, you already know your emergency fund is the most important thing in your financial life. It's boring, yes, but crucial. You should protect the assets you have with insurance. For as long as you're earning an income, you are your most important asset, so dread disease and disability cover is a big deal. Once those two elements are in place, where you go next becomes more complicated. We think everyone should have tax-free investment account. If you're a salary-earning tax-payer, taking advantage of the tax breaks offered in retirement products is a good idea. In this episode, we get five versions of the same question: which investment option is better in the long run? We come up with the following check-list of questions to help you decide: Where can the money stay invested the longest? Time is a powerful ally in investing. The longer you can leave your money to compound, the better. Is the money guaranteed? This ties in to how long you can afford to stay invested. If you need the money in the short term, you want to put it where the outcome is guaranteed. Is there a limit to the up-side? Once again, this comes down to time. The market can go up forever, whereas a fixed rate or guaranteed product can only deliver what was promised, nothing more. Is it the most tax-efficient route? When you're talking investments and time, your risks are inflation and tax - both of which will affect you whether you are aware of it or not. The sole purpose of investing is to counteract the effects of inflation. That just leaves tax. What is the opportunity cost? The very act of putting your money into one vehicle means choosing against all the other vehicles. What is that choice costing you? Are you considering all the moving parts? When it comes to offshore investing, are you thinking of the currency move and the market move? When it comes to asset allocation, are you accounting for your retirement savings allocations too? Are you taking your money out of the country at a high rate? We tend to move money offshore when the rand crashes, which means we're taking money out at a high rate. Money should be taken offshore when the rand is strong. Subscribe to our RSS feed here. Subscribe or rate us in iTunes. Win of the week: Candice My “work husband” recommended the show. This was roughly around the time I found out I was pregnant. I mostly started listening out of fear, but since then we've paid our debt and started an emergency fund. Is it advisable to max out our daughter's TFSA annually and just deposit bits and pieces to our TFSA? Or should we spread our contribution equally across all three? We will only draw from her TFSA in 20 years, if we need to for studies. If not, we'll hand it over to her for her 21st. I have a company ra with the green company, but we're going to start contributing to a 10X RA as well. We don't want to be financial burdens on our daughter when we're older. We want her to have enough money available to not have to take student loans etc and get a helping hand at starting life. I just want to know we are on the right track. Herman wrote an algorithm. The results are in an article called “The ideal pre-retirement allocation mix” on justonelap.com. Nico-Ben It seems the market is currently going down. At the moment my Satrix 40 is at a loss. This does not bother me as this is a long term investment. In one of your podcasts, you said this should be seen as the JSE is having a sale, just like a retail store might have a sale. This makes perfect sense. I was planning to put the rental income into the bond, and top up my TFSA balance in February. Looking at the prices dropping, it also seems like I should consistently buy the Satrix 40 in the TFIA. Which course of action would you suggest? I get it that we cannot predict the market from now to February, and that is too short term to really expect any real profit. Guido After maxing out my tax free savings I'm not sure whether I should carry on saving in a global vanilla etf like Ashburton 1200 or something like the 10x high equity fund. Should I invest in both or am I overexposed as the 10x fund invests in the satrix msci world as well. I am 40 years old and looking for long-term growth. I prefer a global etf at the moment as S.A equity is not doing much. The 10x high equity fund has 50% local equity but otherwise is nicely diversified. Which one should theoretically give the better return in the long run? Gerhard I currently maintain a 50/50 split between international and local investments. Every month I use the new money to try and keep it in balance. Hopefully it's 20+ years before I need to touch any of this money. Recently I stumbled across Galileo Capital's YouTube channel. One thing Warren Ingram keeps mentioning is the "fair value" of the USD to Rand. He feels it's at about R13.90 to the dollar. One should only move money offshore when we are below this level. This includes buying the international ETFs on our local market. Should I just ignore the USD/Rand and keep buying international every month? Or, does one keep the money earmarked for international in cash, and wait for the Rand to strengthen back to those levels? Andy I now own three properties in Cape Town. I live in one (paid off, but lets ignore this lifestyle asset) and 2 investment properties. Paid R800k for the first flat and I'm renting it out for R7800, which covered the bond repayments and the levies and rates. I ended up settling the bond with a lump sum. I used the bond to pay "cash" for the 3rd flat. I now have bond debt of about R600k (on the first investment property) which I'm smashing with my monthly salary savings and rental income from my 1st investment property. The third flat hasn't got a tenant yet as I bought it off plan. I do have market exposure and the necessities covered. Example: I currently have that Liberty evolve product that tracks the top 40, which I will move into simple Satrix top 40 shortly. I also have some individual stocks which are taking a hammering. Mainly speculations on my part. I'm slowly moving away from individual stocks but they are so ridiculously cheap now that I refuse to sell them.. TFSA is maxed (missed one year becasue im an idiot) Emergency fund is adequate. Do I start filling up my Standard Bank OST account with my favourite ETFs or do I smash the bond and then fill up on ETFs? Albert I stumbled across your podcast while trying to find out why the yield of the Satrix MSCI World Equity Feeder Fund Unit Trust was less (by a few hundred rands) than the yield of the Satrix MSCI World Equity Feeder ETF in my TFSA over a period of two years. On a simple TER basis the Unit Trust version of the same product was 0.63 more expensive. At first this didn't seem too bad, until I started running the mathematics with a few assumptions and looking at the lost return over time. Naturally this infuriated me beyond belief. Since then, I've been working my way through your library while going through all of my expenses, investment activity, insurance and pension funding. Being in my early 30's, I have some investment groans about poor investment choices in my 20's like: buying a new car in my first year of permanent employment transferring my previous company's provident fund savings to a preservation fund which has a TER of 3.2%, investing into equities via Unit Trusts without an emergency fund and occasionally dipping into the capital to fund emergencies. That said, I currently don't have debt, have always contributed as much as possible to my employer's retirement fund and am grateful to have some savings and enjoyed some treasured memories of overseas vacations. You have both inspired the following change in my personal life: I have penned a life plan and investment strategy; I have set up an emergency fund which will increase over time (thanks Tyme); I have reconsidered my luxurious expenditure (mostly eating out far too often as I live in JHB), and increased my monthly savings rate from 30% to 35%; Launched a crusade against fees in my personal life: Short & Long-Term Insurance premiums, Moving from an Asset Manager platform to a Stockbroker (Goodbye expensive Unit Trusts), My RA's and preservation fund (this move is still ongoing), Drafted a will, and Placed a mandatory review of my finances firmly in my 2020 calendar. The Question: Given the amount of money I ought to have saved this year thanks to your sage advise (far better than any financial advisor I've met), I would like to send through a bottle of Veuve Clicquot. Then I took a look at the price of those particular bubbles, and surmised that it is beyond what I am prepared to pay for quite a while. Would it be possible for you to set up a Patreon or something? I wouldn't mind kicking a few rands your way on a monthly basis to keep the show running. Alexander From listening to your podcast and speaking with friends and family, I would like to avoid credit. But I am also cognisant of the fact that I'd most likely have to incur at least some debt for a house one day. The Standard Bank consultants informed me that building up a credit score starting now would make applying for future loans easier and that I'd possibly get lower interest rates. Would building a positive credit history (by using credit, instead of my normal cash, and paying it off in 30 days with that exact cash that I would have used) actually allow me to negotiate for better loans in the future? How important is having a credit score in reality? Does your asset base (i.e. my investments) influence your credit score? Surely having built up an asset base would count for more than having a positive credit history, or am I wrong? Do you have any general tips/advice for how I can start planning/structuring my life to minimise my future debt and living costs? At this stage in my life I'm very flexible regarding where I decide to work, buy a house and so on. Chris On the Sygnia website they claim to charge an admin feed of 0.2% on Sygnia ETFs and 0.4% on other ETFs. Since my ETFs are all from other service providers, the 0.4% admin fee would apply + the TER of the ETF itself. (e.g. Satrix World = 0.4% admin + 0.35% TER = 0.75%). However, on the Sygnia RA platform, there is a tool for calculating EAC fees which gives a slightly different output. It states my current EAC fees are 0.89%. On my quarterly statement, it gives a table of each ETF, with the respective TER and management fee applied. The management fee ranges from 0.1% to 0.3%, which is quite reasonable. However this does not tie up with the EAC quoted on the online platform. I'm a bit stumped. The way I see it, worst case I am paying 0.89%, which is in range of the 10x fee of 0.9% so this is acceptable. The fee appears to go down to 0.61% over time which would then make it cheaper than 10x. I should also mention that you do occasionally have to rebalance the portfolio to remain Reg 28 compliant. Sygnia charges a 0.1% brokerage fee for these transactions Ross I have my money back home in a brokerage and savings account. I would like to invest my overseas earnings into something without converting back to Rands. Preferably into USD, EU or GBP. What options would you suggest? Are there any multi currency account banks that accept sign up without residency?
Download this Episode This week we discuss how to keep a real estate transaction moving forward. Listen in to hear ways to keep a real estate transaction on track to closing. Rethink Real Estate Podcast Transcription Audio length 30:43 RTRE 57 – Keeping the Real Estate Transaction Under Control [music] [Chris] Welcome to re:Think Real Estate, your educational and hopefully entertaining source for all things real estate, business, news and tech. [Christian]: I am Christian Harris in Seattle, Washington. [Nathan]: Hi, I am Nathan White in Columbus, Ohio. [Chris]: And I am Chris Lazarus in Atlanta, Georgia. Thanks for tuning in. [music] [Chris]: Hey everybody and welcome back to re:Think Real Estate. We're so happy to have you here this week. We've got Nate back. He is not selling homes right now. We've got Christian here and as always here to talk real estate and all thing real estate related. So just before getting started we were talking about how agents can control the transaction better and make deals go smoothly for our clients. Nate you are always taking listings. What are some things that you are doing to make sure that you are on top of the transaction? [Nathan]: Well again I was start thinking about this a little bit more before we got to recording here but I…again I think you as an individual…we all have different types of personalities but it also setting an expectation to our client. Right. Whether you are the list side or the buy side but you have to set that tone up front. I am a little bit of a controller. Actually a lot but I like to control the situation. You have to have confidence and knowledge in what you're doing to do all that but that is the way I operate. Most of my clients appreciate that. And the reason I brought this us is because I have got a buddy I met the other day. He is a lender and another lender he knew was taking a beating because unfortunately buyers are liars and this buyers agent is calling and is literally in Ethany [phonetics] and all over the phone. And you know at a certain point you gotta tell a client you know whether you're the agent or you are the agent or the client and your client is the buyer or lister, you gotta have control over the certain things you can't do. For that lender the agent was his client, I would have fired him. I wouldn't have taken that you know, it is just the way it goes. Same thing, I don't tolerate certain things from my clients. I mean we call it respect. You know a lot of people like to whine in our business but it is OK to lose a client. It is OK not to get every client. And I think we often forget that. It is kind of one of that win at all cost mentality maybe. I don't like that. [Chris]: And I think if you are winning at all cost you are not factoring in what makes this industry fun, it is being able to enjoy it. [Nathan]: Yeah. [Chris]: So obviously yeah I mean I feel like you are at the point in your career where yeah you can choose and have the option to fire your clients. But why was it…why do you think it got to that point in the transaction where the agent was calling and cursing at the lender? [Nathan]: Again, you know, I have said this before in our podcast. We want to be emotional. And I have always…I think the best thing I was ever taught when I got in this industry is to take my emotion out of it. [Chris]: Amen to that. [Nathan]: We realtors…You know I am gonna beat us up but as I have said the large majority we just love to feel so important, right? We love to know that “Hey look at me, hey look at me. I am an awesome, awesome relator. I am an awesome realtor”. Like… [Chris]: “Let me tell you about me. Let me tell you about me. It is all about me. Really what do you think about me”. [Nathan]: Yeah. And so take the emotion out of it. You know, I don't know. [Christian]: Why do you…why do you suppose…I mean I have my thoughts on this. Why do you suppose he thought it was acceptable and call the lender and cuss him out and get all emotional about it? [Nathan]: Well the guy is an [censored] [laughter]. If he were listening, that is what I would tell him. Right. [Christian]: OK. [Nathan]: Bottom line is whether we are in realty or not you don't treat other people that way. Like you know… [Christian]: Why… [Nathan]: Yeah why did he treat somebody that way? Probably because he had really bad parents I don't know. [laughter]. [Christian]: Yeah I mean… [Chris]: A lot of people don't think about other people as actual beings. Human. I think that si the problem. [Christian]: I mean and I am on that. Obviously treat people as humans. Treat them with respect. But you know when it comes to like being professional in this industry I mean there is a lot of things that I like to push back on in industry like you know our job is to be the rock when our clients are emotional and deals you know on the brink of falling apart. I mean if we get emotional I mean I don't know any of you…I mean I know you guys have kids. I know that when I am near my kid's emotions and he is getting all ramped up and I am ramped up, that doesn't help. [Chris]: That makes it worse. [Christian]: Worse. But I mean if I can be a consistent calm and I am able to bring it back down to like “OK let's look at the reality of things if you know…” But I think a lot of agents kind of lose their cool because they think “I am advocating for my client. I am passionate when I am doing my job”. No no you are just being a [censored] and you are [censored] things up for your client. [Nathan]: Yeah well said. [Chris]: So that gets to a great point on helping to control the conversation to control the transaction. Is controlling emotion. [Christian]: Definitely. [Chris]: Because if we can control our emotion and understand that when we are interacting with a client it is a very…they are in a heightened state of emotion. Right. Buying a…Buying a real estate parcel, right a house or a commercial or whatever it is, is extremely stressful for people because they have a lot invested in it. It is a lot of money. It is a big transaction. So if something bad happens they are gonna think it is the worst thing in the world even if it is just you know a small hiccup. If something miniscule like good happens they are gonna think it is the best thing in the world. So if we can just kind of maintain a level of neither good nor bad on the emotional scale than holy hell like that really can do exactly what it does for your kid Christian. It is just like calm. When something bad goes on don't worry. Got it under control. [Nathan]: I…you know I wasn't here the last episode we recorded because I had a deal going sideways. Even my client's father flew in from Boston. He was… [Chris]: To help the deal or to ruin the deal. [Nathan]: Well at first I thought was honestly he was gonna ruin it. He was very emotional. It was his son's house. It is you know a lot of things going sideways on this. [Chris]: Yeah. [Nathan]: And you know he called me “What are we gonna do?”. And now we're just [inaudible] we're great. We're good buddies now. But I said “We're gonna work the problem.” “What do you mean?” I said “We're gonna work the problem. Work the problem”. I mean we get…this is 3 days of craziness in my life here recently. And he called me and said “Man I gotta tell you kept your cool.” Yeah I did because me getting upset is exactly what Christian said. It is just gonna make everybody else upset. .So I am..I am like the captain of the ship right. If I am freaking out everybody else is freaking out. I am you know…It was not fun. But we got through it. And now here is a gentleman that like he is my biggest advocate that I could possibly have now. But I think if I would have reacted the way he was initially reacting it was gonna be really, really bad 3 days for me. And it turned out an Ok 3 days, you know what I mean. [Chris]: Yeah you gotta control that. [Nathan]: Yeah. [Chris]: That is definitely one thing that agents can do in a transaction to kind of control the tone, control the pace. It is just control our own emotions because whether you want to believe it or not people are gonna mimic you. That is just how it happens. So obviously in the deal that you mentioned Nate the agent got upset with the lender. Obviously something at some point was not communicated clearly. Because if the lender had all the information and the agent had all the information and the buyer was given all the information than usually…I don't see a circumstance where somebody is gonna yell at somebody. Christian… [Christian]: It sounds like there is an unmet expectation there. I don't know. [Chris]: Yeah it sounds like it. So Christian when you are working with a buyer and you've got all these different wheels that are moving more so than with the seller, what are some things that you are doing to set expectation with people? [Christian]: Yeah I mean I say setting expectations specifically but communication in general that is probably the most important thing you can do as a real estate agent. [Chris]: I agree. [Nathan]: Yeah. [Christian]: Because you can be a terrible agent and totally incompetent but if you can communicate well you look like you're doing your job. You know now whether or not you do the back end and actually have knowledge and stuff that is all a different thing but you can be a rock star agent and know exactly what you're going but if your communication sucks your agent is gonna think you suck. [Chris]: It is like you're up on a show. You've got the curtain right and the clients are seeing what is in front not what is behind. [Christian]: right. And so that is a long answer to basically say I am mister kind of control freak I have got processes for everything. And part of the process is this template email as part of my CRM and first thing we do “Hey we are under contract. OK here is the 5 things you are gonna expect, here is what comes next, here is what we're gonna be doing for you in the next 3 days. Here is what you are gonna be doing”. You know. And after we get past our expectance commencing here is what it is gonna look like. You know now that is not the only communication but that is like it sets the expectations up front you know because you get a contract and now there is a whole bunch of stuff going on and now they're stressing out. You know I can't be on the phone with them every 10 minutes you know and call them off the ledge. But if you set these expectations and say “This is what happens and this is what we're doing.” And you know checking in with them whenever there is a new bench mark. That has a calming effect you know on them as opposed to they don't hear anything. [Nathan]: Oh yeah you don't have to do a lot. I mean I send out Friday updates. That is what I call it. Friday updates. Every Friday I touch my clients no matter where we are. Just to give them something right. But I mean Christian you hit…all your points were spot on. Maybe you should just have the Christian Harris school of mentoring real estate agents [laughter]. All people can learn from that. [Chris]: Definitely. [Nathan]: You know communication is key. So…I am with you on that one. I am seeing great agents who know everything very well but they are horrible communicators. [Christian]: And to your point Nathan I mean, part of that communication is even if nothing is going on once a week touching in. I do my touching on Monday because typically like if you are working on a listing that is when it is going to be the most information that we can pass. So I do my updates on Mondays. The point is going on “Hey there is nothing going on and I just want you to know so that you are not wondering what is going on”. [Chris]: Yeah for both of you to reach out and tell somebody nothing has changed, is one of the key differentiators that I have seen for people who are successful and who are not. Because if you are having that communication level when nothing is happening they know “Oh OK nothing is happening but I am not hearing silence”. Because it is when the seller or the buyer, they hear silence that is when they get in their own head. And they start thinking “Well is this agent really doing things in my best interest. Are they really working on my behalf”. [Christian]: You have to interfere with the doubt and the emotions kind of you know. [Chris]: It comes in the silence. Exactly. Awesome so we're getting about halfway through the episode right now. I want to…we are trying out a new segment called re:Think Realty bonus thoughts where we have a topic to discuss that none of us have seen before. We're just pulling it out of an envelope. So this one is “Things seen in houses.” I am really not sure. I guess we're just supposed to talk about things that we have seen in houses. Things like “Where is Waldo”. Print frames. Eye level in the bathroom. Things like that. Blurred out dog face on a listing photo. [Christian]: So like funny or unique things that we have seen? Is that like… [Chris]: Yeah what are some unique things that you have seen in homes that you have listed? [Christian]: I have seen atrocious staging and unfortunately it was one of my first listings when I was trying out a stager so… [Chris]: Was it really? [Christian]: I had to fire that stager and the stager I use now was the person that came in like 2 days noticed and saved the day. But yeah I have seen that. I have noticed that you want to make sure you have a local stager. Here in Seattle we've got a couple of…Well we've got a lot of island like 107 islands. And one of the…I had a friend who had a mom who does staging so I gave her a hot but she was from one of the islands and she came over and did it and her idea of staging was weaker in floral prints. And it made it look like a grandma's house and it was not gonna fly in Seattle. [Chris]: Wow. [Christian]: That is unfortunately that was kind of my fault but that was something I have seen that was atrocious and made sure it didn't get to the listing photos and that was a learning experience. [crosstalk]. I am sorry? [Chris]: What do you got Nate? What is something you have seen in a house? [Nathan]: Guns. [laughter] [Christian]: Alright. [Nathan]: No, yeah I mean like literally guns just laying out around the house. [Chris]: Oh yeah I have seen that. [Nathan]: Like hand guns and rifles. And magazines in the club. I love guns don't get me wrong but I have got clients who have a kid with me and I am like “Holy snap” like you know what's going on. Like… [Christian]: That is a different world in Ohio I guess. [Chris]: It is not just Ohio we've got that in Georgia too. I have walked through homes and opened up a closet and boom there is a shotgun just sitting right there. [Nathan]: That is…the oddest…[crosstalk] [Chris]: Yeah so one of the oddest things that I have ever seen in a home is in a basement they…put in multiple urinals in a restroom. [Christian]: Like a restroom? [Chris]: Like a bathroom but then they…When they finished the basement they made it like a big bathroom with like 3 urinals but no divider. Really, really weird I have no idea why. [Christian]: Were they having like a fight club in the basement? [Chris]: Yeah yeah it was really weird. I ended up not getting that listing. Because I don't think he liked what I said about marketing that. [Nathan]: Have you guys ever been in a home where they have pad locks on all the doors on the exterior like on a bedroom? [Chris]: I have seen that one. [Christian]: That is creepy as hell. [Nathan]: I saw that a few weeks ago and I was like “That is really weird”. [Chris]: Yeah. [Christian]: I wouldn't want to know what they do. [Chris]: You are either doing some child abuse there or you just got a lot of guns in that room. [Christian]: It's sketchy. [Chris]: Whatever it is. Yeah it is in the living room [laughter]. “You are not getting into my living room. This is mine”. It could be like one of those…Did you all see the listing that it was making the rounds on a few weeks ago, the sex dungeon in the basement? [Nathan]: Awesome. [Chris]: Yeah I mean just things like that. [Christian]: Yeah like the brokerage had some pretty fun stuff, the lighter side of real estate had some pretty funny things like that. [Chris]: Yeah definitely the things that they come up with that is absolute hilarity. I can't believe that you know when Kellen [phonetics] when he did his deal to our show got picked up by lighter Real Estate. It was… [Christian]: That was awesome. [Chris]: It was in one of the shows. OK so yeah re:Think Real Estate bonus thoughts. Giving it a shot. Tell us what you think. Make sure you leave us a review on iTunes for anybody listening. I…shoot us a comment either on our Facebook page or on the website on rtrepodcast.com. So back to today's topic which was the agent's control of the transaction. Where they can make a big impact. Nate what is one of the most impactful things that you find you are able to do for your clients outside of communication and setting expectations? [Nathan]: I don't know. This…I mean it sounds weird but just being upfront and honest. I feel like…I feel like there are so many agents that just are not forthcoming. Do you know what I mean? [Chris]: Yeah. [Nathan]: Again it is the win at all cost or lie at all cost just to get the listing. I mean I just went on a listing in an apartment a couple of weeks ago and she walked me up in the room and she said “Nate what do you think about this room”. I started to laugh and she said “What is funny?” And I said “This is a [censored] ugly room”. And that is all [laughter] I said all these things in here and in the bathroom too and she starts laughing and I say “What is so funny Jane?” And she says “I have had 3 other agents in here and none of them have had the balls to tell me what I already knew.” [laughter]. She said “I love that you already told me that it is ugly”. She said “I know it is ugly but everybody else says this is gorgeous, this is lovely, we will do this to make it look like this”. She is like “It is an ugly room. Why won't somebody just tell me the truth?” And I told her the truth and guess who got the listing? [Chris]: There you go. There you go. [Nathan]: Tell the truth. If they don't like the truth than they will hire somebody else that will tell them whatever lie they want to hear. [Chris]: And if you feel like you're not up to telling somebody “This is a [censored] ugly room”. You don't have to say it like that. [Christian]: You can be more diplomatic to be honest. [Chris]: Yeah be more diplomatic. [Christian]: That is not Nate's style. [Nathan]: That is not my style lets be honest. [Chris]: Just so that our audience knows. You don't have to do it Nate's way. You can tell somebody “No this room may not be up to the aesthetics as the rest of the house. We probably won't focus our marketing efforts on this room”. [Christian]: Or “You can burn this room down”. Or something like that. [Chris]: Yeah. Or “We could put up some fumigation label outside so nobody comes in”. Whatever it may be, but yeah on that line with honestly I think one thing agents have sometimes gotten self-caught up in is when they find something that they don't know they will try and [censored] their way out of it. Instead of saying “I don't know, let me get you the answer. We will make sure that we do this the right way”. And people feel like you know winning at all cost they want to feel like the expert they always want to be in the expert shoes, they don't want to step back and admit you know, “There might be something I don't know here”. You know that is kind of one thing that I think goes a long way in controlling the transaction is don't be afraid to admit where there is something that you haven't dealt with. That is why it is important to have a good team unless you are Nate. In which case you are solo. But if you've got a good team or resources or you know even friends and people that you respect in the industry and people that you can reach out to as long as they're you know you are following your broker's direction, you are making sure that everything is legal and ethical. I don't think we have to cover that at this stage in the game. But yeah just making sure that where your shortcoming are you are not [censored] through them. Christian what do you think are some things that you now can help control the situation a little bit more throughout the transaction especially due diligence, getting into financing and getting up to the posing table? [Christian]: Sure so I mean there is obviously like a minimum standard of what an agent has to do. I am more like how much can I do to help an agent. You know. So for us you know I mean like we all know that is…you know good buyers. You know it is the buyers responsibility as part of their…you know once they get a contract and they're talking to a lender and get all the documents they need and stuff. They need to reach to interns company and get a policy in place and that kind of stuff. But like that is not really on our shoulders but I still make it a point to you know a day or 2 after to send out an email and say “Hey this is a reminder, these is the things that you need to do. Make sure you get your lenders documents at town manor, make sure you get a quote on home insurance because they can't hold an appraisal before you do”. You know just stuff that is not necessarily in my ball part but it helps them know that, like “These are things that you need to do as part of the process”. [Chris]: Yeah and going an extra mile is huge. We've got a lot of good feedback ever since we started implementing move easy, which ties into our transaction management system. So move easy when our agents mark that their client is under contract they get this digital check list and resource bank that tells them everything that they need to do during the move from “Don't forget to order your moving supplies, don't forget to line up your child care, you're getting all your pet immunizations” whatever it might be. We put all of it in a checklist and our agents…our clients seem to love it. For those that take advantage of it. [Christian]: And that as I recall it is free for agents right? [Chris]: Well it has to be set up on a brokerage level but yes it is free. [Christian]: So talk to your broker about setting it up for you. Or if you do something like client giant you know per agent they do kind of that concierge. They take care of all your utilities and that is helpful too. [Chris]: That's awesome yeah. And that was Jay O'Brien [phonetics] we had him on last year. Definitely a great episode to go and listen to about providing what was it 7 start service in a 3 start industry? [Christian]: Yes. 5 start service and 3 star…7 start... [Nathan]: 7 star… [Chris]: 7 star in a 3 star. [Christian]: It's a good… [Chris]: Yeah it's a good one. He's a really good person to listen to as well. [Christian]: Yeah for the service yeah. [Chris]: Yeah I mean there is so many things that we can do to go above and beyond. You know in Georgia the typical transaction is byer gets contract. Contract gets due diligence. Due diligence gets home inspection. After home inspection there is no other inspection done. They may be right on. I have never seen anybody do a lot of base paint test. They just kind of waive that and you know that is it. But there is so many other things that we can do. We can advise for air quality testing if there are allergies present which that I have seen happen. Partnering them with an insurance agent to make sure that the home is insurable and check for what the previous claims are. Like getting a clue report pulled. All of these things are huge and can make a big impact in not only your client experience but also controlling the situation, making sure that things are discovered before we get too far. So that at the last minute when we get to the closing table things are reared in their ugly head. [Christian]: So speaking of kind of above and beyond just us doing our jobs for our clients, I mean what are you guys thoughts about health warranties? Typically I have written those off because they are so limited typically. As far as what they replace in the time frame. But like recently I helped a friend of mine buy a house kind of outside of my normal area a little farther outside in Takoma. And the recommended inspector from some of my you know, agent friends down there, they actually include a very inclusive home warranty that I was very impressed with. And no extra charge you know like because they already did the inspection on the roof so they guarantee the roof is gonna hold for 5 years and appliances for this long and you know all these extra stuff that seems like a real value add for no additional money either to your pocket or out of their pocket. But what are you guys thoughts on hat? [Nathan]: I mean here in Ohio it is long. A seller typically pays for home warranty. I like them but I like to choose it because there are certain home warranties that have what they are called caps or limitations on what they will cover. And if you know those I don't think that is a good value. The ones that I typically go with on home warranty has no caps. The other side of it form a listing side is they have seller protection from the moment we put that house on the market, the items are covered in warranty. But I think you have to articulate to your client that a home warranty is good for your major stuff. [Chris]: Yeah sure. [Nathan]: Your HVAC furnace. [Chris]: Sometimes. [Nathan]: Yeah well OK again here they're smart like don't go and have a home warranty claim when you had an inspection that said it was bad right. That is not the way to do it so… [Chris]: And on top of that if you have a 25 year old HVAC system it is not gonna pay for a brand new system if it [censored] out. It will have a maximum amount that it will pay towards but on a 25 year old system it is gonna not cover that switch over from you know what was it our 20 to now 4 10A or whatever the new coolant is. So you got explain that to your clients. Again back to what Nate was saying. Expectation setting. Back to what Christian was saying. Expectation setting. Making sure that everybody understands where the value is when they get it. [Christian]: So what you're saying is that home warranty can be of value just make sure you do your research that is actually a quality home warranty that provides something. [Chris]: Yeah. [Nathan]: 100%. [Chris]: On the first home that my wife and I ever purchased, 3 months in the stove shorted out. It came out 50 dollar call, rewired the entire thing and it worked fine. It is still in that home. But that was a lot less than it would have been you know to have you know a new stove or bring out an electrician so it has its values. [Nathan]: Yeah yeah, I just had to call a client and we were 2 days outside of closing an she was the seller and the hot water tank failed. We had seller protection on it. Guess what 65 dollar call, brand new hot water tank. [Chris]: There you go. [Christian]: Save your 500 dollars. [Nathan]: Saved probably more than that and you know she was already stressed out and called the client. I said “Let's have home warranty take care of that”. Again if you know what you're getting can be a great value. But… [Chris]: Absolutely. [Nathan]: There are a lot of junk ones. [Chris]: And all of this…yeah all of this goes in line with taking control of the transaction and making sure that we are directing it in a way to get it to the closing table and we are directing it in a way that is in our client's best interest. [Christian]: Yeah and speaking of staying in control of that transaction one of the things that I see…I moved to a whole other topic on this whole episode, but is that you know what do you do to continue to provide value and stay in front of your clients after closed? Or what the agent is gonna feel at that? [Nathan]: That is a whole episode. [Chris]: Yeah that is a whole episode. Why don't we get into that next week [laughter]? [Christian]: OK well I will give a little teaser than. [Chris]: Let's give a teaser and we will get into it next week. [Christian]: What we started to do is a sort of called home button and that has been great because it is cheap. Right now it is only 25 dollars. You know, to use it and you get it for 500 clients. But basically it provides every month to your home buyer, it provides them with an automated like “Here is what your home is worth and if you refine, this is what it would look like, if you are AIRBNBed one of your rooms this is the value if you added 300 dollars a month extra payment you know you would pay this much less over the course of yadayada”. So basically provides all these really easy to understand analytics for a client's house that is branded to you. [Chris]: Awesome. [Christian]: And instead of you know you sending out some junk email drip thing every month where they probably don't even look at, here is something that directly relates to their house that they're probably gonna look at it. And you can see all the analytics and back end when they're click on it. [Chris]: Thanks for tuning into re:Think Real Estate. Make sure you join us next week as we talk about how to provide value post-closing and control that relationship into the future. Christian you gave a great teaser on that. For anybody who hasn't please go to rtrepodcast.com. Sign up for the newsletter so you never miss when we drop an episode and leave us a 5-star review on iTunes. Have a great day everyone. [music] [Chris]: Thanks for tuning in this week's episode of the re:Think Real Estate Podcast. We would love to hear your feedback so please leave us a review on iTunes. Our music is curtesy of Dan Koch K-O-C-H, whose music can be explored and licensed for use at dankoch.net. Thank you Dan. Please like, share and follow. You can find us on Facebook at Facebook.com/rethinkpodcast. Thank you so much for tuning in everyone and have a great week. [music]
If you're an entrepreneur in the wedding industry, you understand how challenging it can be to run a wedding business... but what if you have thoughts about running not one, but two different business? In this week's episode of the This Week In Weddings podcast, we're chatting with Chris Jesperson, who runs both a wedding videography business and an event venue. We're hearing how he decided to jump into another area of the event industry and how he manages both. About our guest: Chris Jespersen is a Cleveland based entrepreneur working in the events industry. Chris has filmed weddings and events all over the world and has recently opened one of Cleveland’s biggest event venues. In this episode, listeners will hear about: Chris's background in videography and how he started thinking about getting into another area of the event industry How Chris manages two businesses simultaneously while also traveling Chris' philosophy of just jumping in and not overthinking too much before starting a new venture Want to connect with Chris? On the web: http://www.storyboxcinema.com/ On the web: https://themadisonvenue.com/
We all know that Neysa writes about many things including marriage. But have you met her hubs, Chris? On this podcast, hear about how Chris-N-Neysa came to be.
Chris Cieri is the owner and founder of Franklin & Whitman an all-natural skincare company. Chris founded the company two years ago after growing a beard and wanting a beard serum that actually smelled good. Since then the brand has expanded into natural skin, body and hair care. Chris founded the company with the social mission at the core and 5 percent of sales go to dog rescue. We Talk About: Working for yourself The transition of becoming your own boss - giving yourself permission Busyness as an excuse What do we need to be resilient? Do we need struggle? Doing the less fun stuff - why it matters Moving through blocks/getting stuck Using fear as a “tailwind” There's no scoreboard for fear or pain Choosing to be happy Being mindful about your energy Making the “right” decision Life is a choose your own adventure book Figuring it out The power of connecting people and helping people feel like they belong Ending things on a high note Nice versus kind How to take advice The power of getting help and building off others The power and importance of vulnerability as a man Links mentioned HBO special “the defiant ones”: https://amzn.to/2DzP5Jx Braving the Wilderness Brene Brown: https://amzn.to/2qGXQcf Announcements: New date: January 12th Boston Frank & Whit Event Get tickets: https://franklinandwhitman.com/products/yoga-for-the-pups-boston-1 Get the Lightroom Presets: buy here: https://gumroad.com/l/init4thelongrun-presets Connect with Chris On instagram: https://www.instagram.com/frankandwhit/ Shop for Frank & Whit Products: https://franklinandwhitman.com/ Connect with Me On instagram: instagram.com/init4thelongrunblog On the blog: http://init4thelongrun.com Join the Joy Squad Joy Squad Private Facebook Group https://www.facebook.com/groups/thejoysquad/ Chasing Joy Podcast Instagram https://www.instagram.com/chasingjoypodcast/
In this episode, Chris Martin of Type Classes and Joe LaSala of The Frontside talk about blockchain development. Do you have opinions on this show? Want to hear about a specific topic in the future? Reach out to us at contact@frontside.io or on Twitter at @thefrontside. This show was produced by Mandy Moore, aka @therubyrep of DevReps, LLC. TRANSCRIPT: JOE: Hey, everybody. Welcome to Episode 104 of The Frontside Podcast. I'm Joe LaSala. I'm a developer here at the Frontside and I'm going to be hosting today's episode. Today we're going to be associating blockchains and other cryptographically secure technologies and everything that has to do with the web and the future of the web. We have with us Chris Martin and he's currently with Type Classes. What do you do over there, Chris? CHRIS: Our goal is to teach functional programming with Types, specifically with Haskell and a little bit Nix. We do subscription video service. JOE: There seems to be, I guess a bit of an overlap between people who are into functional programming and people who are involved in this new space that has opened up, this new web, I guess and that's something that I want to talk about based on a tweet that I saw you made recently. You mentioned that there's a big section of the Haskell community that is being drawn into whatever the hot ICO is at that moment there, something along those lines. CHRIS: Some of it are bitcoin people or something else but there's definitely a weird overlap that I can't fully explain. JOE: It seems like strange bedfellows, right? CHRIS: Well, there's a couple of things that make sense, which I think the distributed systems in cryptography are kind of these notoriously hard problems. I think when somebody wants to convince their boss that they really need to use Haskell for this problem, I think they can make a persuasive argument in this case. JOE: That's interesting. There's actually, a lot of technology around blockchains around bitcoins, specifically being written in Haskell. I didn't know they were technologically overlapped like that. I guess I just thought they were two very kind of passionate communities but you're saying that a lot of the bitcoin startups that you might see coming out in any given week are actually being written with an eye towards functional programming. Is that accurate? CHRIS: I don't know about bitcoin along this bit but I think some of the people who are working for banks and trying to develop their own sort of novel internal blockchains and stuff, I think those are the people who see this. Although in the case of banks, we don't necessarily see what's coming out of them, so we can't verify whether they're actually shipping things or not. JOE: Yeah. That means there's a lot to touch on there. I would agree with you on your initial sentiment, also just to extend to say that I think personally that both communities are really evangelical. Functional programmers, people who are into functional programming, for me it hasn't clicked yet and I know that it will come into my heart. I've asked functional programming to kind of where things are starting to fall into line where I'm certain to see the world in that way but for people who have seen the light fully, I'm sure believers once monads and functors kind of enter the conversation. They don't leave. It's similar like when bitcoin first started and everybody's running about the gold standard. Really, it's just nothing. It was hard to find resources on it that did the most of the amount of screaming. CHRIS: Yeah, you're absolutely right, that culturally, they're going to attract the same group of people or the people who are willing to adopt something that's not fully fleshed out yet, people who want to take what they believe and sit in this community and try and spread it to the rest of the world. I think it's the same kind of people. JOE: The early adoption, I think is something I can consider too. I guess it's a very risk-oriented group. CHRIS: Yeah, kind of. I mean, Haskell is pretty old, I guess but -- JOE: That's fair, yeah. CHRIS: -- Some of the changes that really make it, it great and usable lately are pretty [inaudible]. JOE: That's interesting. You mentioned this idea -- we kind of skipped over a little bit but thanks, having their own blockchains and that's something that I think that maybe people not actively following this space, which is I will say, a very hard space to keep up for those of us who are actively following it. But those who may just know blockchain through the name of an iced tea company changing or some sensational news article or what have you or just through bitcoin even, but I know that it's not the blockchain. It's not a singular blockchain. It's very easy to implement the fundamental structure. It's a linked list, essentially, with the kind of a cryptographic thing that keeps from breaking that link. Those links are inserting new history, I guess the further you go back. I guess people are even exploring different data structures like directed acyclic graphs and stuff and how that could be used to map other domains but the reality is it's a linked list and you can spend up as many of them as you want and you can mine blocks based on all this different criteria. Bitcoin is a proof of work associated with the minting of a new block and that's been a problem for them as they scale as a currency but it could be a history of anything and the minting of those blocks can be based on anything. You mentioned banks, the financial kind of sector is certainly interested in these smaller private chains but do you think there's a use for that consumer market as well? How do you think that your personal blockchain or set of blockchains might be a factor in the hobbyist of the futurist life? CHRIS: Oh, wow. That's a different question than I thought. [inaudible] where you're going with that -- JOE: Where do you think I was going? CHRIS: Well, we're talking about banks and so, the question is now everybody other than banks -- JOE: Well, it could be everybody, including banks too, however you want to take it. CHRIS: Yeah. There's a much harder question, I think of what in the world we're actually saying when we are talking about blockchain, right? The notion obviously has started with bitcoin but if what you want to do is bitcoin, then you should just be as in bitcoin, so what are we talking about similar bitcoin and the general phrase people have they like to throw in here is Byzantine fault tolerance. I'm talking about any kind of system that can have multiple participants. We're used to talking about clusters of computers and making systems that can work if one of them fails, if one of them just stops working but now, we're starting to talk about how do we make systems work if one of them gets hacked, then we still have some assurances that the whole system works together as a whole. JOE: Would you consider Byzantine fault tolerance to be the defining factor of a blockchain because I feel like there's the timestamping element that goes along with it. I feel like they're kind of part and parcel, right? CHRIS: Kind of but if you're not considering Byzantine faults, if you're only talking about systems where you have benign faults, which is a machine goes down sometimes, then timestamping isn't really a problem because we can just use NTP and we all have a pretty sensible idea of what time it is. JOE: Time specifically, even just like, I guess order. I always considered sequence to be a massive part of what a blockchain fundamentally was. You have the distributed aspect of the network that gives this sort of resilience to malicious intent but not only is it protected, I guess against demolition and malicious intent by this crowd strength but also just fundamentally through the cryptographic side of it, you can't go in and insert things that didn't happen. Once that order has been said, it's been written in stone, basically, right? Because the way I understood is there were papers coming out of Bell Labs in the early 90s and those two things set as approaches to this independently and it wasn't until the internet advance so we put them together and we're able to achieve Byzantine fault tolerance through that. Is that, I mean...? CHRIS: It does help a lot, I think to buck up and think about what the state of research was in the 90s because I think that's something that a lot of people in blockchain space kind of lose sight of. You have a whole lot of people writing papers now who didn't used to be academics until a couple of years ago. It was the early 90s where we started having faxes and we started having what later turned into what's kind of known as raft. Like you said, they solved the ordering problem. Even something as simple as what we call Lamport clocks which is you have sort of a virtual timestamps and as long as nobody's malicious, if you remove the timestamp forward, then we can all have something that resembles the deterministic forward flow of time. Then, that milestone that I was like to remind people of this in 1999 is when we had the paper practical Byzantine fault tolerance. JOE: That was '99. You're talking about the... was it Castro and --? CHRIS: Liskov, yeah. JOE: Okay. I didn't know it was '99. CHRIS: Interestingly, the same Liskov that the Liskov substitution principles named for, Barbara Liskov. It's also a distributed systems research. JOE: That's swell as well. I kind of heard the concept of Byzantine fault tolerance but I never read this paper. I'm also surprised to find that it didn't come out of that same period of the early 90s and it was as far as '99. I haven't read its entirety but I did fall asleep reading it last night. You mentioned this specifically, I guess, when we're talking today, as a paper that is important. It's the work that we're trying to do at... was it Hijro, I think? CHRIS: Yeah. JOE: Yeah, so what kind of work were you doing there and what is important to you, I guess about this paper specifically, when you look at all the research that went into priming the community for the space that we are now in? CHRIS: When I joined Hijro, I got kind of a difficult and nebulous mission, which was that everyone in and around that space that was trying to sell to banks was if you said the word blockchain, you could get your foot in the door because all the banks were looking at bitcoin and saying, "Well, look, this is clearly something that's going to be big and we don't want to be missing out, so we have to figure out how this applies to us." JOE: What year is this? They were working this in 2014-ish, is that right? CHRIS: '15 or '16, I think. The question was trying to figure out what aspect of it was actually what they wanted here. What Hijro is trying to sell them, the details aren't even important for this conversation but we need an interbank solution. We needed a ledger of accounts that 'we weren't a bank so we couldn't be the one holding everyone's money and keeping track of the flow of money in our network.' We were on something that the banks were truly in charge of but we didn't want to necessarily have our platform be owned by a particular bank. We wanted to be the sort of consortium of all of our partners. JOE: Consortium is a keystone word I think here, that we should definitely come back to that. CHRIS: Yeah and people talk about, if I use the word consortium blockchain, I think sometimes in contrast with the public blockchain, with the 'free anyone can join' blockchain. JOE: Yeah. I'm particularly fascinated by this concept. That is a term that is used. I can confirm this. But you're doing that pretty early then because I feel like that concept didn't make it out into, I guess the public understanding, until recently or maybe I'm just behind at times. CHRIS: Yeah, I guess so. I don't know. When I start working on this, I just spent a couple of months trying to read papers about what was in space and I guess, the only big name that was trying to do something like this was Tendermint. JOE: Tendermint? Interesting. CHRIS: You can pick out technologies like this because the magic number is always one-third. They can tolerate Byzantine failure up to one-third of the nodes. That was a theoretical result that was reached, just sort of the best you can do. Before BFT and then BFT is one of those solutions in that category and Tendermint does something similar. JOE: That, I guess is sort of the background to this paper and it's impacting your life. I guess, what is put forth in this paper is to solve for higher tolerance. Would that be the right way to put it? CHRIS: Did you say higher tolerance? JOE: Yes. You're talking about the Byzantine tolerance is 30%, right? With Tendermint? But you're saying that they're doing something similar to that's before in the paper? CHRIS: The most interesting thing to me, I think is probably, hopefully possible to convey concisely is the rationale behind the one-third number because that took a while for me to really appreciate but I think it really clicked when it did. One of the hardest intuitions to get people to break, I don't know, way of thinking to shift, I guess is convincing people that consensus is even a hard problem because I had this conversation a lot with people that'd say, "I've got this JavaScript library here, for instance that just lets me broadcast a message to all the nodes in a cluster, so why can I just do that?" Why can't we just use one at a time to do it and if I detected someone's trying to cheat, if I get two different messages from someone that are conflicting, maybe I can just ignore them. JOE: Not in finance. That's kind of ironic, I guess that you found it difficult to get people to come to a consensus about the importance of consensus. CHRIS: Right. The basic flow of all these things is we describe them as voting systems. We have voting rounds where each time, like you said the blockchain of the ledger or whatever it is, just a linked list, so the problem of using consensus build database is we're just going to iteratively try to vote or come to consensus on what the next block is. What the next ledger entry should be? Obviously, since we don't have a synchronized wall clock to go by, we have to assume messages can come in any order. We might all sort of speak up simultaneously and propose different blocks as the next one, at which point we have to start over and retry that. But furthermore, I can send different votes to different people if I'm trying to be malicious and that's where the tricky part comes on. The rationale for the one-third number, maybe I can just try to come around to that and say it directly then, is that when we take a vote for what the next block is going to be, we need the supermajority. We need two-thirds of the participants to have all said the same thing and the rationale for that is it's actually easier to think of it backwards. Rather than saying, two thirds of the total, what we say is, "If we're going to allow some fixed number of nodes to fail, to behave maliciously --" you know, we traditionally call that number 'F' in the paper, then what we say is we need 3F+1 total nodes to be participating. JOE: I didn't know that was sort of codified into how conflict is resolved on things like bitcoin during blockchain. It's inherent, I guess. CHRIS: No. This is the total opposite of what bitcoin and Ethereum are going to do. JOE: Because I always thought it was just going to be like a majority, I guess but what you are talking about is more like how the Senate would were to pass a resolution to the constitution, like it has to be an exceptional majority. I'm starting to understand why one-third, specifically. It's 3F+1, I guess. CHRIS: The reason is because for each vote, every time I look at the results of a vote, I have to be able to assume that some number that we called F, of the people that I've heard back from are trying to cheat me. It turns out I need to be sure that the majority of the votes that I've heard back are from people who are actually following the protocol correctly and not lying. We need to be tolerant to two kinds of failure. One is that a node simply goes down and we don't hear from them and we don't receive a vote from them and then the other kind of failure is the Byzantine failure, that they're not following protocol in some way. The reason I need 3F+1 nodes is because we need to be able to make progress, even if F of these number is we didn't hear from at all because they're down and then, I need 2F+1 votes because I need to take into account the possibility that some F of these votes were from cheaters and then we need to have more honest votes than lying votes. JOE: That's pretty profound. I definitely going to finish the rest of this paper while conscious later today. I guess we're a little off with regard to math at this point and it's when you said, you spent I guess a month or so just reading papers around the time you started with Hijro and I guess did you stop because I feel like I've read just more white papers than ever thought I would outside of the academic setting, just trying to keep pace with what's been going on, particularly with regard to the web. I don't if you're familiar with like IPFS but these sort of directed acyclic graph things are popping up all over the place and platforms are even now being built on this concept. I guess, Ethereum feels impractical in a lot of ways. These dime-a-dozen tutorials, when you started talking about the global computer that is Ethereum and the blockchain and it's going to change everything in the internet and you won't have to pay Comcast like some central authority or you just pay for each transactions. The reality of it is every time you do a write against a data store have, first of all, thousands of computers go and verify that and also, you don't want to store your information on a linked list. It's not feasible for storing large data structures and it becomes very expensive for the user and for the person, if you're maintaining a smart contract for the contract itself. These are volatile, all little points of value. It's impractical. CHRIS: It's definitely a cost that you don't want to incur. In all cases, just a confirmation time is a cost you don't want to incur. JOE: Absolutely. CHRIS: There is one nice thing that that you can do in some cases, which is that people is talking about the piggybacking on these blockchains like if I have a system and I just want some extra assurance to keep it honest, then I can do things like periodically publish a hash of my database onto something like bitcoin or Ethereum. JOE: Yeah. That actually happen with anyone in financial... They do publish stuff in the paper and this was before cryptographic ledgers but to basically prove that this was the state of something, I remembered seeing this somewhere, like there would be in financial news, like there'd be some crazy number or string at the top to verify what was on the string. CHRIS: Yes. Of course, the irony there is that you really don't need some kind of blockchain if you want to do that because the fact that we're doing that before the blockchain has existed and doubly, it's funny because the first block of the bitcoin blockchain, the genesis block includes in it, I think a New York Times headline, which was intended as proof that Satoshi or whoever didn't spend years mining bitcoin prior to releasing it. It's supposed to be a proof of the time of the first genesis actually was. It's funny that we are actually already had this verification system and what that demonstrates is sort of a principle of consensus that I like to talk about which is that as you increase the time scale, consensus becomes an easier and easier problem. I think the reason why something like newspaper headlines are reliable means of a timestamp is just mostly because they're big and slow, because there's only one every day. I think the whole challenge like you said of, how a lot of systems kind of boiled down to having the white paper for bitcoin refers it describes bitcoin as a distributed timestamp server, something along those lines. The reason why you need a new technology to do that, I think so that you could have timestamps that are every of couple minutes, rather than every 24 hours. JOE: That's a very interesting take on it. I guess, the more time there is, it is easier to reach a consensus. It's just interesting to think about. It's funny as humans like the longer time passes, the less reliable memory is, I guess, less reliable history as we conceive of it, I guess. It's different when you record something than the way that you hold in the brain that sometimes I wonder how much impact that's had on. It's a little ephemeral, I guess but it's interesting. CHRIS: Yeah. I guess my statement is limited to the on-scale where we can actually fit into memory. JOE: Right, that most of the times, it's the only relevant scale, I guess, like a blockchain doesn't have use outside of our use of it, inherent to it, so it's going to be seen through that lens, I guess of our use of it. I think it is kind of profound, a thing to think about that I definitely considered. You mentioned using blockchains as adding a little bit of... how do you put it? Like truthiness, I guess, we'll say. I know that's not how you put it but adding a little bit of security, maybe around something else but the reality is you can get away with that on a number of other levels. I think that's important and interesting to think about. There seems to be this trend now talking about a blockchain as part of a bigger picture or consortium blockchain or a consortia of blockchains, right? Because a consortia would be multiple and then a consortium would be... No, a consortium would be a single grouping, consortia would be multiple groups. Basically, going back to the problem you're trying to solve with Hijro, you have multiple banks and I believe eventually, I don't know if you work on it, there was a protocol that came out of that company to unify these blockchains, like a few of them. They demoed and everything. That, I think gives you some power with regard to access control but again, I guess, that's not a thing that you really need consensus for. So, where does it fit in? Aside from things like voting and transparent finance for maybe a political cause or in the case of bitcoin, just finance in general. In bitcoin, I feel like we got Mongo DB super hard in the sense that it just got applied to every domain and it applies to very, very few. CHRIS: My boss at Hijro, Lamar Wilson really like to say that people talked about blockchain like it was hot sauce and they sort of sprinkle it on everything to make it better. JOE: That's sad. CHRIS: I guess, two answer to that one. One of the places where it absolutely captivates people's imaginations too far and doesn't work and then places where it doesn't work, so I want to start with the first here because the biggest mistake that people make is that there was this notion of tokenization that came out of Ethereum, where anyone could make a smart contract that represented something and now, also that I can trade digitally. Just like it's money or some kind of digital asset, so people want to talk about putting your car, putting your house on the blockchain or selling it there. But it's just shocking how many times I had to remind people that if I make a smart contract that represents cars and I put my VIN number on it and I transfer you my car, at Ethereum contract in an exchange for a bitcoin, if I call the police and report my car stolen, they're not going to look at the Ethereum contract, right? JOE: Yeah. Man, you're really right. People don't think about that enough. If your car is in the blockchain, your car still on the block. CHRIS: What we had realize when we're selling solutions like this is that they're great for some reasons but you need actual legal agreements to underpin things when you actually make connection to the real world. The magic of bitcoin that can't really be replicated is that the coin actually didn't need a pinning to the real world because the thing bitcoin was running was itself. It just depended on hoping that people were going to find the coin and ledger valuable intrinsically and bitcoin never really purported to control things in the real world. JOE: I guess, definitely not in the paper. There are some place that can buy in from some very specific elements of society that sort of cemented its place as useful but we don't really need to go to that road, I guess. I don't know. You know, my roommate is a lawyer and we have this conversation often and I feel like if we go down law and cryptography, we're going to be talking for too long, where we are at currently. CHRIS: Right and that wasn't your question anyway. It was just what I respond to easiest because being a critic is always the easier thing to do. JOE: I can feel you there. CHRIS: One of the interesting things that I never even found too much about but I noticed this in a couple of passing references as I was reading stuff about Byzantine fault tolerance in general is that it seems to have some application in things like flight control systems and space ships because when you think about a computer that you're going to send into space, you have two things that Byzantine fault tolerance applies to directly. One is you need a lot of redundancy. You need these control systems, maybe you have a dozen things computing the same result because you can't replace the hardware when once you shot something to space. The second thing is once you've sent something outside the atmosphere, all of the sudden, you're being bombarded with a lot more cosmic rays than you were before. Now, you actually really do this idea that computers can fail, not just by stopping but by producing wrong results. All of a sudden, it becomes a lot more real because you actually have physics slipping a bit at your computers. JOE: I don't even think you have to go as far as space if you talk about just like a fleet of something, like self-trading cards. I suppose, in domain where there is an interplanetary file system, it's good to specify the planet we're talking about. Just having worked a little bit with robots in college, they lie all the time and they produce bad data constantly, so not even bad actors just incompetent actors, I guess could definitely... This is something that has to be, I guess on our minds as we move forward as the society that has more connected devices, which I think as much as I would love to have left this conversation off in outer space, I think bringing it around to the internet of things, which is sort of where this all began months and months ago is probably a good place to stop meandering through these cryptographic weeds. You can probably put a pin in this. I think we've been talking about for a while now, I guess and just kind of trying to see what it is and where the applications are. It's constantly changing and never clear, I think is the conclusion that I've come to. I don't know. I think, just kind of shooting the breeze about it is a fitting end to a series of Frontside engagements in this space, for the time being. CHRIS: I've seen several people try to tackle the space of how to stop relying on things like Google Drive to store our data because I think a lot of us have realized that we're tired of losing all of our family photos every time a hard drive dies but a lot of people are uncomfortable with trusting Google with everything. This to me seems like a perfect opportunity for people to start building redundant systems among their home and friends. JOE: Yeah, I completely agree. I'm actively trying to do exactly that right now. CHRIS: Oh, cool. And you don't necessarily want your cluster of machines that's running on all of your family's computers to be able to go down if your 10-year old get some virus, right? JOE: Right and also, there's definitely things that you want just within your home or even just within your section of the home. I guess you could layer chains, to kind of manage those interactions? CHRIS: Sure. I'm not exactly sure what you mean by layering chains. JOE: You could have consortia in this case. If you had like a hypervisor, almost like a control notice, essentially or some type of view from above of this situation, you could say, think of it as a family scenario. We have three different houses on this call that all belong to our immediate family and cousins and whatever and it's like, me and my siblings, we have information that we all want just within the siblings. We don't want Mom and Dad to know. We don't want the cousins to know, so you could basically use like a blockchain to kind of date access to data that is held within that consortium and then the consortia could communicate amongst each other. Only the pertinent information that they wanted to allow access to at that time and then, internally of course, you could have all these different mechanisms for how you actually store that data or how you actually serve it up. It's pretty complicated. CHRIS: Yeah, I think you made a lot of sense, though. JOE: Yeah, cool. I'm hoping so. There's been some work on it out of Microsoft, actually. CHRIS: On the files storage problem, specifically? JOE: I guess this is like with a smart home and kind of just teaching devices to cooperate and ask each other. If you had a section of connected devices that maybe were related to the workflow that a human being might go through to get groceries or something and then a section that's related to doing laundry or whatever, eventually, they would learn to communicate in the laundry grouping and could say, "Hey, grocery people. We're out of soup," or something like that. It's sort of almost happened organically, I guess. I had not actually felt like I found that paper. I've only found references to it. This is where I need to get something like academic access but that was interesting stuff. I don't know how I end up here, either. This has always happening when you're talking about this domain. Anyway -- CHRIS: People's ideas, it's just sort of generally inspiring concept so people is following you everywhere. JOE: Yeah, it's heartwarming. You know, with my ICT, I could look back and see exactly where I usually came from than [inaudible], the name of the farmer who grew with. I don't know. It'd be so much easier to fake most things, really when you think about it. On that note, I hope that this conversation was... I know that there was no JavaScript and I apologize for that but I hope that our audience finds it interesting on some level and I want to thank you for your time. Chris, it was really great talking to you and getting your take on these things as somebody who's been in the industry for a while. Definitely, some fascinating points to consider and definitely, I will finish that white paper, probably this evening because it's pretty cool. If anybody in the audience has anything they'd like to ask you about pertinent to this conversation or anything else, where is a good place to get a hold of you? CHRIS: For me, it's mostly Twitter. I'm @chris__martin. I'm also at Type Classes, if you want to talk to me about our new business. JOE: Cool. This has been Episode 104, I believe of The Frontside Podcast. Frontside, we're a consultancy based in Austin, Texas and we love writing elegant, sustainable code and just producing good stuff, really. I think that's what we're all about. I think, we can agree at least, that's a core tenet of what we do and if you would like us to produce some good stuff for you, feel free to get in touch with us. Also, feel free to reach out via email if you have any ideas for future topics or any feedback about this episode. I also want to thank Mandy for producing this episode. You can catch us next week, I believe for our talk with Brian Douglas on Probot and Robert will be hosting that one, as far as I know. Thank you all for your time and feel free to reach out. This has been The Frontside Podcast. I'm Joe LaSala. Chris Martin, thank you for joining us and have a good day, everybody.
Who: Chris Roberts and Vincent Ferrari Special Guest: Vinny’s friend, Deb When: Sunday, March 11, 2018 Where is Chris: On the streets of Washington, DC Where is Vinny: The Lower Hudson Valley (less snowy) What made the show: After exchanging the usual pleasantries, Vinny introduces us to his friend Deb who has three children in+ Read More