432 episodes

On The Bike Shed, hosts Joël Quenneville and Stephanie Minn discuss development experiences and challenges at thoughtbot with Ruby, Rails, JavaScript, and whatever else is drawing their attention, admiration, or ire this week.

The Bike Shed thoughtbot

    • Technology
    • 4.9 • 122 Ratings

On The Bike Shed, hosts Joël Quenneville and Stephanie Minn discuss development experiences and challenges at thoughtbot with Ruby, Rails, JavaScript, and whatever else is drawing their attention, admiration, or ire this week.

    432: The Semantics and Meaning of Nil

    432: The Semantics and Meaning of Nil

    The term ‘nil’ refers to the absence of value, but we often imbue it with much more meaning than just that. Today, hosts Joël and Stephanie discuss the various ways we tend to project extra semantics onto nil and the implications of this before unpacking potential alternatives and trade-offs.

    Joël and Stephanie highlight some of the key ways programmers project additional meaning onto nil (and why), like when it’s used to create a guest session, and how this can lead to bugs, confusion, and poor user experiences. They discuss solutions to this problem, like introducing objects for improved readability, before taking a closer look at the implications of excessive guard clauses in code.

    Our hosts also explore the three-state Boolean problem, illustrating the pitfalls of using nullable Booleans, and why you should use default values in your database. Joël then shares insights from the Elm community and how it encourages rigorous checks and structured data modeling to manage nil values effectively.

They advocate for using nil only to represent truly optional data, cautioning against overloading nil with additional meanings that can compromise code clarity and reliability. Joël also shares a fun example of modeling a card deck, explaining why you might be tempted to add extra semantics onto nil, and why the joker always inevitably ends up causing chaos!

    Key Points From This Episode

    The project Joël is working on and why he’s concerned about bugs and readability.
    Potential solutions for a confusing constant definition in a nested module.
    A client work update from Stephanie: cleaning up code and removing dead dependencies.
    How she used Figjam to discover dependencies and navigate her work.
    Today’s topic: how programmers project extra semantics onto nil.
    What makes nil really tricky to use, like forcing you to go down a default path.
    How nil sweeps the cases you don’t want to think too hard about under the rug.
    Extra semantics that accompany nil (that you might not know about) like a guest session.
    Examples of how these semantics mean different things in different contexts.
    How these can lead to bugs, hard-to-find knowledge, confusion, and poor user experiences.
    Introducing objects to replace extra nil semantics, improve readability, and other solutions.
    Some of the reasons why programmers tend to project extra semantics onto nil.
    How to notice that nil has additional meanings, and when to model it differently.
    The implications of excessive guard clauses in code.
    An overview of the three-state Boolean problem with nullable Booleans.
    Connecting with the Elm community: how it can help you conduct more rigorous checks.
    Some of the good reasons to have nil as a value in your database.
    The benefits of using nil only to represent truly optional data.

    Links Mentioned in Today’s Episode

    'Working Iteratively' blog post
    Check your return values (web)
    Check your return values (API)
    Primitive obsession
    'Avoid the Three-state Boolean Problem'
    Elm Community
    'The Shape of Data': Modeling a deck of cards
    The Bike Shed
    Joël Quenneville on LinkedIn
    Support The Bike Shed

    • 38 min
    431: Developers Are Professional Question Askers

    431: Developers Are Professional Question Askers

    Stephanie shares her newfound interest in naming conventions, highlighting a resource called "Classnames" that provides valuable names for programming and design. Joël, in turn, talks about using AI to generate names for D&D characters, emphasizing how AI can help provide inspiration and reasoning behind name suggestions. Then, they shift to Joël's interest in Roman history, where he discusses a blog by a Roman historian that explores distinctions between state and non-state peoples in the ancient Mediterranean.

    Together, the hosts delve into the importance of asking questions as consultants and developers to understand workflows, question assumptions, and build trust for better onboarding. Stephanie categorizes questions by engagement stages and their social and technical aspects, while Joël highlights how questioning reveals implicit assumptions and speeds up learning. They stress maintaining a curious mindset, using questions during PR reviews, and working with junior developers to foster collaboration. They conclude with advice on documenting answers and using questions for continuous improvement and effective decision-making in development teams.

    Class names inspiration
    How to Raise a Tribal Army in Pre-Roman Europe, Part II: Government Without States
    Diocletian, Constantine, Bedouin Sayings, and Network Defense
    The Power of Being New: A Proven Recipe for High Impact
    How to ask good questions


     JOËL: Hello and welcome to another episode of the Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville.

    STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way.

    JOËL: So, Stephanie, what's new in your world?

    STEPHANIE: So, if it has not been clear about just kind of the things I'm mentioning on the podcast the past few weeks, I've been obsessed with naming things lately [chuckles] and just thinking about how to name things, and, yeah, just really excited about...or even just having fun with that more than I used to be as a dev. And I found a really cool resource called "Classnames." Well, it's like just a little website that a designer and developer shared from kind of as an offshoot from his personal website. I'll link it in the show notes.

    But it's basically just a list of common names that are very useful for programming or even design. It's just to help you find some inspiration when you're stuck trying to find a name for something. And they're general or abstract enough that, you know, it's almost like kind of like a design pattern but a naming pattern [laughs], I suppose.

    JOËL: Ooh.

    STEPHANIE: Yeah, right? And so, there's different categories. Like, here's a bunch of words that kind of describe collections. So, if you need to find the name for a containment or a group of things, here's a bunch of kind of words in the English language that might be inspiring. And then, there's also other categories like music for describing kind of the pace or arrangement of things. Fashion, words from fashion can describe, like, the size of things. You know, we talk about T-shirt sizes when we are estimating work.

    And yeah, I thought it was really cool that there's both things that draw on, you know, domains that most people know in real life, and then also things that are a little more abstract. But yeah, "Classnames" by Paul Robert Lloyd — that's been a fun little resource for me lately.

    JOËL: Very cool. Have you ever played around at all with using AI to help you come up with the naming?

    STEPHANIE: I have not. But I know that you and other people in my world have been enjoying using AI for inspiration when they feel a little bit stuck on something and kind of asking like, "Oh, like, how could I name something that is, like, a group of things?" or, you know, a prompt like that. I suspect that that would also be very helpful.

    JOËL: I've been having fun using that to

    • 38 min
    430: Test Suite Pain & Anti-Patterns

    430: Test Suite Pain & Anti-Patterns

    Stephanie and Joël discuss the recent announcement of the call for proposals for RubyConf in November. Joël is working on his proposals and encouraging his colleagues at thoughtbot to participate, while Stephanie is excited about the conference being held in her hometown of Chicago!

    The conversation shifts to Stephanie's recent work, including completing a significant client project and her upcoming two-week refactoring assignment. She shares her enthusiasm for refactoring code to improve its structure and stability, even when it's not her own. Joël and Stephanie also discuss the everyday challenges of maintaining a test suite, such as slowness, flakiness, and excessive database requests. They discuss strategies to balance the test pyramid and adequately test critical paths.

    Finally, Joël emphasizes the importance of separating side effects from business logic to enhance testability and reduce complexity, and Stephanie highlights the need to address testing pain points and ensure tests add real value to the codebase.

    RubyConf CFP
    RubyConf CFP coaching
    Testing pyramid
    Outside-in testing
    Writing fewer system specs with request specs
    Unnecessary factories
    Your Test Suite is Making Too Many Database Calls
    Your flaky tests might be time dependent
    The Secret Ingredient: How To Understand and Resolve Just About Any Flaky Test
    Separating side effects to improve tests
    Functional core, imperative shell
    Thoughtbot testing articles


    STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn.

    JOËL: And I'm Joël Quenneville. And together, we're here to share a bit of what we've learned along the way.

    STEPHANIE: So, Joël, what's new in your world?

    JOËL: Something that's new in my world is that RubyConf just announced their call for proposals for RubyConf in November. They're open for...we're currently recording in June, and it's open through early July, and they're asking people everywhere to submit talk ideas. I have a few of my own that I'm working with. And then, I'm also trying to mobilize a lot of other colleagues at thoughtbot to get excited to submit.

    STEPHANIE: Yes, I am personally very excited about this year's RubyConf in November because it's in Chicago, where I live, so I have very little of an excuse not to go [laughs]. I feel like so much of my conference experience is traveling to just kind of, like, other cities in the U.S. that I want to spend some time in and, you know, seeing all of my friends from...my long-distance friends. And it definitely does feel like just a bit of an immersive week, right? And so, I wonder how weird it will feel to be going to this conference and then going home at the end of the night. Yeah, that's just something that I'm a bit curious about. So, yeah, I mean, I am very excited. I hope everyone comes to Chicago. It's a great city.

    JOËL: I think the pitch that I'm hearing is submit a proposal to the RubyConf CFP to get a chance to get a free ticket to go to RubyConf, where you get to meet Bike Shed co-host Stephanie Minn.

    STEPHANIE: Yes. Ruby Central should hire me to market this conference [laughter] and that being the main value add of going [laughs], obviously. Jokes aside, I'm excited for you to be doing this initiative again because it was so successful for RailsConf kind of internally at thoughtbot. I think a lot of people submitted proposals for the first time with some of the programming you put on. Are you thinking about doing things any differently from last time, or any new thoughts about this conference cycle?

    JOËL: I think I'm iterating on what we did last time but trying to keep more or less the same formula. Among other things, people don't always have ideas immediately of what they want to speak about. And so, I have a brainstorming session where we're just going to get together and brainstorm a bunch of topics that are fr

    • 40 min
    429: Transforming Experience Into Growth

    429: Transforming Experience Into Growth

    Stephanie has a newfound interest in urban foraging for serviceberries in Chicago. Joël discusses how he uses AI tools like ChatGPT to generate creative Dungeons & Dragons character concepts and backstories, which sparks a broader conversation with Stephanie about AI's role in enhancing the creative process.

    Together, the hosts delve into professional growth and experience, specifically how to leverage everyday work to foster growth as a software developer. They discuss the importance of self-reflection, note-taking, and synthesizing information to enhance learning and professional development. Stephanie shares her strategies for capturing weekly learnings, while Joël talks about his experiences using tools like Obsidian's mind maps to process and synthesize new information. This leads to a broader conversation on the value of active learning and how structured reflection can turn routine work experiences into meaningful professional growth.

    Mindmaps in Mermaid.js
    Module Docs episode
    Writing Quality Method docs blog post
    Notetaking for Developers episode
    Learning by Helping blog post


     JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville.

    STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way.

    JOËL: So, Stephanie, what's new in your world?

    STEPHANIE: So, as of today, while we record this, it's early June, and I have started foraging a little bit for what's called serviceberries, which is a type of tree/shrub that is native to North America. And I feel like it's just one of those, like, things that more people should know about because it makes these little, tiny, you know, delicious fruit that you can just pick off of the tree and have a little snack. And what's really cool about this tree is that, like I said, it's native, at least to where I'm from, and it's a pretty common, like, landscaping tree.

    So, it has, like, really pretty white flowers in the spring and really beautiful, like, orange kind of foliage in the fall. So, they're everywhere, like, you can, at least where I'm at in Chicago, I see them a lot just out on the sidewalks. And whenever I'm taking a walk, I can just, yeah, like, grab a little fruit and have a little snack on them. It's such a delight. They are a really cool tree. They're great for birds. Birds love to eat the berries, too.

    And yeah, a lot of people ask my partner, who's an arborist, like, if they're kind of thinking about doing something new with the landscaping at their house, they're like, "Oh, like, what are some things that I should plant?" And serviceberry is his recommendation. And now I'm sharing it with all of our Bike Shed listeners. If you've ever wondered about [laughs] a cool and environmentally beneficial tree [laughs] to add to your front yard, highly recommend, yeah, looking out for them, looking up what they look like, and maybe you also can enjoy some June foraging.

    JOËL: That's interesting because it sounds like you're foraging in an urban environment, which is typically not what I associate with the idea of foraging.

    STEPHANIE: Yeah, that's a great point because I live in a city. I don't know, I take what I can get [laughs]. And I forget that you can actually forage for real out in, you know, nature and where there's not raccoons and garbage [laughs]. But yeah, I think I should have prefaced by kind of sharing that this is a way if you do live in a city, to practice some urban foraging, but I'm sure that these trees are also out in the world, but yeah, have proved useful in an urban environment as well.

    JOËL: It's really fun that you don't have to, like, go out into the countryside to do this activity. It's a thing you can do in the environment that you live in.

    STEPHANIE: Yeah, that was one of the really cool things that I got into the

    • 43 min
    428: Ruminating on Ruby Enumerators

    428: Ruminating on Ruby Enumerators

    Joël explains his note-taking system, which he uses to capture his beliefs and thoughts about software development. Stephanie recalls feedback from her recent RailsConf talk, where her confidence stemmed from deeply believing in her material despite limited rehearsal. This leads to a conversation about the value of mental models in building a comprehensive understanding of a topic, which can foster confidence and adaptability during presentations and discussions.

    The episode then shifts focus to the practical application of enumerators in Ruby, exploring various mental models to understand their functionality better. Joël introduces several metaphors, such as enumerators as cursors, lazy collections, and sequence generators, which help demystify their use cases.

    Episode on note-taking
    What we believe about software
    Ruby Enumerators
    Enumerator Lazy
    Modeling a Paginated API as a lazy stream
    Solving a memory performance issue with enumerator
    Find in batches
    Binary tree implementation with different traversals
    Teaching Ruby to Count


     STEPHANIE: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Stephanie Minn.

    JOËL: And I'm Joël Quenneville, and together, we're here to share a bit of what we've learned along the way.

    STEPHANIE: So, Joël, what's new in your world?

    JOËL: So, what's new in my world isn't exactly a new thing. I've talked about it on the podcast here before, and it's my note-taking system. I have a system where I try to capture notes that are things I believe about software or things I think are probably true about software. They're chunked up in really small pieces, such that every note is effectively one small thesis statement and a paragraph of text, and maybe a diagram or a code snippet to support that. And then, it's highly hyperlinked to other notes. So, I sort of build out some thoughts on software that way.

    A thing that I've done recently that's been pretty exciting with that is introducing a sort of separate set of notes that connect to my sort of opinion notes. So, I create individual notes for public works that I've done, things like blog posts or conference talks. Because a lot of those are built on top of ideas that have been sitting in my note system for a while. Readers and listeners get to sort of see the final product, but often sort of built up over several months or even a couple of years as I added different notes that kind of circled a topic and then eventually got to a thing.

    What I did, though, was actually making those connections explicit. And so I use Obsidian. Obsidian has this cool graph view where it just sort of shows all of the notes, and it circles them with, like, connections between them where the notes connect. So, I can now see in a visual format how my thoughts cluster in different topics, but then also which clusters have talks and blog posts hanging off of them and also which ones don't, which ones are like, oh, I have a lot of thoughts on this topic, and I've not yet written about it in a public forum; maybe that would be a thing to explore. So, seeing that visual got me really excited. I was having a good time.

    STEPHANIE: Yes, I have several thoughts coming to mind in response, which is, I know you love a visual. I really like the system of, even if you have created content for it, like, you have a space for, like, thoughts about it to evolve. Because you said, like, sometimes content comes out of notes that you've been...or, like, thoughts you've been having over years, but it's like, even afterwards, I'm sure there will still be new thoughts about it, too. I always have a hard time finding a place for that thing kind of once I, I don't know, it's like some of that stuff is never really considered done, right? So, that is really cool.

    And I also was just thinking about an old episode of The Bike Shed back when Chris Toomey and Steph Vicc

    • 35 min
    427: RailsConf Recap and Conversing About Coupling

    427: RailsConf Recap and Conversing About Coupling

    Joël and Stephanie talk RailsConf!. Joël shares how he performed as a D&D character, Glittersense the gnome, to make his Turbo features talk entertaining and interactive. Stephanie's talk focused on addressing test pain by connecting it to code coupling, offering practical insights and solutions.

    They agree on the importance of continuous improvement as speakers and developers and trying new approaches in talks and code design, and recommend Jared Norman's RailsConf talk on design patterns, too!

    That One Thing: Reduce Coupling for More Scalable and Sustainable Software
    [Connascence as a vocabulary to discuss coupling](https://thoughtbot.com/blog/connascence-as-a-vocabulary-to-discuss-coupling](https://thoughtbot.com/blog/connascence-as-a-vocabulary-to-discuss-coupling)
    The value of specialized vocabulary


    We're excited to announce a new workshop series for helping you get that startup idea you have out of your head and into the world. It's called Vision to Value. Over a series of 90-minute working sessions, you'll work with a thoughtbot product strategist and a handful of other founders to start testing your idea in the market and make a plan for building an MVP.

    Join for all seven of the weekly sessions or pick and choose the ones that address your biggest challenge right now. Learn more and sign up at tbot.io/visionvalue. 

    JOËL: Hello and welcome to another episode of The Bike Shed, a weekly podcast from your friends at thoughtbot about developing great software. I'm Joël Quenneville.

    STEPHANIE: And I'm Stephanie Minn. And together, we're here to share a bit of what we've learned along the way.

    JOËL: So, Stephanie, what's new in your world?

    STEPHANIE: So, I think I can speak for both of us and say what's new in our world is that you and I just came back from RailsConf in Detroit.

    JOËL: Yeah, we were there for, I guess, it's a three-day conference. Both of us were giving talks.

    STEPHANIE: Yeah. I don't think we've both spoken at a conference for at least a little over a year, so that was really fun kind of to catch up in person. And there was a whole crew of thoughtboters who were there. Yeah, I feel like we were hanging out, like, a lot [chuckles] all of last week, just seeing each other, talking about, you know, rehearsing our talks and spending time together on...there was, like, a hack day, and we were sitting at the table together. So, I feel like I'm totally caught up on everything that's new in your world, and that's it. That's the end of the show [laughs].

    JOËL: On that note, shall we wrap up?

    STEPHANIE: [laughs] That would not be very fair to our listeners.


    JOËL: Yeah. So, how was the conference speaking experience for you?

    STEPHANIE: Ooh, it was really great this year. I have not spoken at a RailsConf before, so this was actually, I think, a bigger stage than I had experienced before, and I had a great time. I met Ruby friends, new and old, and, yeah, I left feeling very gooeyed, and very energized, and just so grateful for the Rails community [laughs]. Yeah, I had a very lovely time, kind of being a little bit outside my normal life for a few days. And I think my favorite part about these things is just like, anywhere you go, you can kind of just have a shared interest with someone, and you can start a conversation with them.

    JOËL: That's really interesting. Do you find yourself just reaching out to strangers at conferences like this? Or do you tend to just hang out with the people that you know?

    STEPHANIE: Oh, I think a little bit of both. I like to get meals with people I know. But if I'm just hanging out in, like, the lobby or if I happen to get a seat for a talk and I'm sitting next to someone that I don't know, I find it quite easy to just be like, "Hi, like, I'm Stephanie. Are you excited for this talk?" Or, like, "What good talks have you seen recently?" There's an aspect of, like, the social butterfly that com

    • 37 min

Customer Reviews

4.9 out of 5
122 Ratings

122 Ratings

Rintel ,

Valuable for All Developers

I am a Python developer and derive a lot of value and enjoyment from the podcast despite the fact that the hosts are Ruby developers. The podcast does an excellent job in presenting topics of interest to all software developer, so don’t be put off by the hosts “day jobs.”

zman603 ,

Informative and just plain good radio

The two co-hosts have chemistry and the show is also well edited. It wouldn't surprise me if somebody on the team has radio experience.

The show sounds like a bubbly chat ar the coffee machine between two senior engineers.

On the technical side it definitely leans toward Ruby on Rails subjects. It doesn't dive deep into any particular topic, so I in that sense can't say I've "learned" anything from it. It's a good way to stay aware of current software trends. It's where I first heard about Tailwind CSS or that Cypress tests help you write more accessible websites. I often leave an episode with the thought, "Oh, that sounds cool. Let me check this out."

From the topics covered it sounds like the hosts are in their 30s. They're drifting away from technical questions and more toward project management and leadership. For example "How do we mentor junior devs in a remote office?" or "How do I balance my time between managing and building?"

One final kudos: so many people talk a big game about accessibility. They walk the walk. Each episode has a full transcript.

bnmounir ,

2 yrs of listening

One of the best tech podcasts. Highly recommend!

Top Podcasts In Technology

Ben Gilbert and David Rosenthal
All-In with Chamath, Jason, Sacks & Friedberg
All-In Podcast, LLC
Lex Fridman Podcast
Lex Fridman
Search Engine
PJ Vogt, Audacy, Jigsaw
Hard Fork
The New York Times
TED Radio Hour

You Might Also Like

The Changelog: Software Development, Open Source
Changelog Media
Remote Ruby
Jason Charnes, Chris Oliver, Andrew Mason
JS Party: JavaScript, CSS, Web Development
Changelog Media
Ruby for All
Andrew Mason & Julie J
Syntax - Tasty Web Development Treats
Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers

More by thoughtbot

Giant Robots Smashing Into Other Giant Robots
Build Phase