On today’s episode we break down the idea of ‘The Last Responsible Moment’. We talk about the benefits of leaving certain decisions to the latest possible time before finalizing them. Although this might sound like a bad idea and perhaps slightly irresponsible there really are times when only doing what is absolutely necessary at any give point can work in your favor. During this chat we try to figure when that is and when that is not. We also go down the rabbit hole on the concept of ‘You Ain’t Gonna Need It’, or YAGNI, which is helpful in understanding The Last Responsible Moment. On top of this the chat veers into shaving yaks, Yik Yak and some other things that do not involve yaks. Listen in to hear all about it!
Key Points From This Episode:
- When is the last responsible moment?
- ‘You ain’t gonna need it!’ And who gets to say it.
- Yak shaving and how to how to avoid it.
- The times when YAGNI might not be the best strategy.
- Lego bags in stead of more code.
- When is the last responsible moment to get into crypto currency?
- And much more!
Transcript for Episode 46. The Last Responsible Moment
[0:00:01.9] MN: Hello and welcome to The Rabbit Hole, the definitive developer’s podcast in fantabulous Chelsey Manhattan. I’m your host Michael Nunez. My cohost today -
[0:00:10.7] DA: Dave Anderson.
[0:00:11.9] MN: And our producer -
[0:00:12.6] WJ: William Jeffries.
[0:00:13.8] MN: Today we’ll be talking about the last responsible moment. Similar to when we decide what episode we’re going to record, we usually leave that for the last responsible moment.
[0:00:24.1] DA: Yeah, that’s when I feel really inspired and also like, I feel like for us, we actually feel more fired up about the topic that we’re talking about. It’s like, if we decide in advance then maybe when we get to the studio, we’re not feeling as excited and we’re not as invested in it but there are actually good reasons to do things at the last responsible moment in programming as well.
[0:00:47.2] WJ: You never have less information than you do right now.
[0:00:50.5] MN: There you go.
[0:00:51.6] DA: That’s true.
[0:00:52.3] MN: If you leave it for the last responsible moment, that’s the most information you’re going to have.
[0:00:57.2] DA: I guess.
[0:00:58.5] MN: That’s the reason why you do it.
[0:00:59.7] DA: Yeah, I guess there’s a tradeoff though because you can’t decide too late with some of these things. We can get into that.
[0:01:07.9] WJ: Yeah, then, that’s the new responsible moment.
[0:01:09.6] DA: That’s true. That’s actually very true.
[0:01:12.8] MN: It’s the last responsible moment or if not, it will be the last irresponsible moment which is really bad.
[0:01:20.7] WJ: Or just one of the irresponsible moments.
[0:01:22.1] MN: Or many irresponsible moment.
[0:01:24.0] DA: Least responsible moment.
[0:01:25.7] MN: Exactly. Yeah. I think, when does planning I guess or like doing things before the last responsible moment would pay off before you do it? Versus doing it later in life I guess?
[0:01:41.0] DA: I guess like a pretty classic example of deciding things at the last responsible moment is the phrase like, YAGNI which is ‘you ain’t going to need it’. There may be a feature that you think is really cool and you want to build out like there’s this awesome button you want to add to the page and it’s going to best the best things for whatever situation.
[0:02:04.3] WJ: But you ain’t going to need it.
[0:02:06.2] DA: Yeah, you really don’t need it. You could build it and spend all this time making it really great but then maybe no one ever clicks on it. You got to ask yourself, what is the button that you really need to build?
[0:02:16.8] MN: Right. This goes for both like developers and other contributors who may want to add all these things to the website but may not actually paint the full picture of the most reliable product that you’re trying to build.
[0:02:31.8] WJ: Even when before you get to actual whole feature sets in architectural level or even at an implementation level when you’re building out an app, it’s really easy to prematurely optimize, you know, make it so flexible that you could connect it to a sequel database or a no sequel database or to a web app or to Redis.
You don’t actually need to connect any of those things because it’s all available in like one, five file and if you just maybe one five, if you just make it work with the flat file then you’re done.
[0:03:09.6] DA: Yeah, that’s like the prototype, there may not be the final thing that you end up shipping like it may not be the thing that is the best version of the product but it’s something that works for right now, that’s why you’ll go with that rather than delaying it longer so that you can add this additional overhead into the product.
[0:03:33.4] WJ: Because you ain’t going to need it.
[0:03:36.1] DA: Although like there are some things that you might want to decide even though they’re further in advance like if you want to decide if there is going to be a database, maybe you should decide that. Maybe you shouldn’t do the flat file thing.
[0:03:48.8] WJ: Premature optimization, who needs it?
[0:03:53.2] DA: I mean, if you decide what programming language you’re going to be starting your project in, you probably can’t put that off too long.
[0:04:03.4] MN: You got to choose early, at least to program a language. Who gets to exercise the YAGNI? Who gets to call that out? Well, you ain’t going to need it, nope, not doing it. How does that work? People who are, you know, is it the developer who is looking at this feature and then wondering, “Hey, I don’t think we’re going to need this,” or is it like you know, from the stakeholder who then tells the product owner.
“I don’t think we’re going to need this.” Is anyone fair game to call a YAGNI on something?
[0:04:37.5] WJ: I think the YAGNI you’re currently shaving should call YAGNI on you.
[0:04:41.2] MN: Wait, the what? Say that again?
[0:04:45.4] WJ: There’s this term yak shave.
[0:04:46.8] MN: Okay.
[0:04:47.4] WJ: Yak shaving is when you are – it’s a term, I think it came out of MIT like many decades ago but the story goes that somebody was trying to let’s say, build a web server and they went to Brew install and they found that they needed to update Brew. They tried to update Brew but their web connection wasn’t working very well.
They tried to call their internet service provider, the call didn’t go through because they actually had their sister’s phone. They went to go drive to their sister’s house who lived in another town in order to trade phones because they’d mistakenly swapped and halfway there, the guy runs out of gas.
He pulls over and he finds a farm and then goes and approaches the farmer and he says “Hey, you know, I’m trying to get to my sister’s apartment to swap phones and I ran out of gas, can you give me a lift?”
The farmer says, well, “Yeah, I mean sure, but I’m going to need something in exchange, could you help me out, I got this yak over here who needs a shave.” The guy’s like, you know, “All right, takes the clippers and he starts shaving the yak,” and he thinks to himself, “Why am I doing this again? That’s right, it’s because I needed to setup that web server.”
[0:06:06.4] MN: My gosh.
[0:06:07.1] WJ: That’s the yak shave, you’re like so many levels from the thing you were originally doing that you stop and you’re like, “Do I really need to shave yak right now?”
[0:06:16.3] MN: Is that really just happened?
[0:06:18.7] WJ: “I wonder – maybe if I had in the very beginning just like downloaded the utility that I needed off of the website rather than using Brew.”
[0:06:30.8] DA: My gosh.
[0:06:32.9] WJ: There’s so many different paths that you could have gone down that would have saved you so much time and energy and that’s you know, that’s one of those moments where like, you ain’t going to need it.
[0:06:41.4] MN: Right.
[0:06:42.2] WJ: You ain’t going to need it.
[0:06:43.7] MN: Right, there you are, now, at a farm, someone’s farm, yak shaving when you could have totally avoided that.
[0:06:51.9] DA: You might need it eventually. You know, if you shaved the yak, you might get some nice wool and you can make it -
[0:07:00.2] WJ: You never when that’s going to come in handy.
[0:07:01.5] MN: Right.
[0:07:01.8] DA: Right.
[0:07:03.3] MN: You said, the person who is yak shaving can call YAGNI, that was the phrase.
[0:07:08.1] WJ: The joke was, the yak you are currently shaving should call YAGNI on you. But really, I mean, I think, Dave’s right, anybody should be able to call YAGNI on you. When you notice that you are shaving a yak, that’s when you should think to yourself, I better YAGNI myself.
[0:07:21.6] MN: Okay.
[0:07:21.6] DA: Right.
[0:07:22.8] MN: Don’t be the yak that’s getting shaved.
[0:07:25.0] DA: That’s one of the benefits of pair programming too. Because I will often go down rabbit holes when I’m by myself and I will like, think things through to a very high degree.
[0:07:35.8] MN: Right.
[0:07:36.8] DA: But, if someone else is there, it’s like, maybe we should do something, we should actually write code. Maybe not too much code, just enough code.
[0:07:44.0] MN: I see.
[0:07:44.7] DA: You know.
[0:07:46.9] MN: Code that you're going to need. I think what you mentioned before with pair programming, you’re less likely to yak shave with two people because you have the other person to say, hold on, why am I holding the yak and you got the clippers or vice versa, it’s just like wait, we have this thing, let’s just program, like bring this up to the product owner and figure out why are we actually doing this kind of thing.
[0:08:13.9] DA: Yeah. They’re also really into shaving yak for whatever reason.
[0:08:20.0] MN: What if the app that you’re building has to do with shaving yaks? Do you need it? I think you will need it.
[0:08:30.8] WJ: What is that app? Yik Yak?
[0:08:32.5] MN: Yik Yak?
[0:08:33.5] WJ: Yeah man. I think their mascot is a yak.
[0:08:37.1] MN: Wait, now I have to google that, I have no idea what you’re talking about. Yik Yak?
[0:08:42.7] WJ: Yeah, Yik Yak.
[0:08:44.0] MN: Everyone, go google –
[0:08:45.5] WJ: I think this was like one of those terrible corners of the internet that was –
[0:08:51.1] DA: I see on the verge Yik Yak, once valued at 400 million shuts down.
[0:08:56.6] WJ: I think that’s probably for the best. I think that was mostly used for harassing people in college campuses.
[0:09:02.3] MN: Wow. I have no idea, I mean, it is what appears to be emoticon of a yak I think, listeners, feel free to go on google, the Yik Yak.
[0:09:15.4] DA: Maybe don’t.
[0:09:16.7] WJ: I think we’re going to YAGNI that.
[0:09:19.3] MN: You ain’t going to need it guys.
[0:09:20.8] WJ: You don’t need to see this logo of defunct company that we’re only talking about because we’ve fallen into this rabbit hole.
[0:09:29.5] MN: Exactly. Yeah, I mean, we have to consciously – when we do the work that we do as developers, we should constantly ask ourselves why, why are we building this?
[0:09:45.3] WJ: Is this the simplest thing that could possibly work?
[0:09:47.3] MN: Right.
[0:09:48.4] DA: Yeah, I guess like rather than building in absolute flexibility because you don’t know, you’re just making assumption and go with it and be like “Okay, I accept that this may not be the best thing but this is what’s going to work for right now and we’ll come back to it.”
[0:10:07.3] MN: I mean, the benefits of YAGNI is, for one, you don’t have to build this – you don’t have to make anything more complex than it needs to.
[0:10:17.5] WJ: Then you have less code to maintain.
[0:10:19.2] MN: Exactly. By maintaining less code, you’re more likely to build better features with more clarity.
[0:10:25.5] WJ: It will be easier to build the feature that you really need.
[0:10:27.7] DA: Yeah. I guess like a danger of kind of waiting for last responsible moment or like kind of thinking too close in the new term is that you might kind of end up thrashing with some features, like you might write some code because it works right now. “Okay, well, this is what we need for this very moment.”
There could be something more responsibly you can do. You could like re-architect the thing and it will cost you a lot of time and energy but it will just invalidate everything that you’ve done previously. Sometimes you might need to actually buckle down and be like, you know what? We actually do need to do this thing that is going to be hard and you know, invest our time and energy to get it done.
[0:11:13.4] WJ: Dave, you’ve been waiting for the last responsible moment to build that new version of pair trix, right?
[0:11:19.3] DA: Yeah.
[0:11:19.5] WJ: When is that happening?
[0:11:22.3] DA: We’ve been using this pairing tool which is like largely grey but there’s one thing that kind of bug me about it. I really wanted to have random pair assignments and like there’s a button you can click on the tool and it has this really exciting feature where they’re like, the rows light up and the columns light up and it looks like it’s like finding a random pair but it’s always just filtering down to the next available one which makes me kind of sad. I want it like random.
[0:11:46.2] WJ: But you can’t teach an old pair new tricks.
[0:11:49.4] DA: Exactly. It was like talking with Stacy the other day here at the office and I was like, “Yeah, I really want to do this thing, I think it would be a great project for myself and whatever,” and just haven’t started it yet and she’s like, “Why do you even need to do that?”
[0:12:06.4] WJ: You ain’t going to need it.
[0:12:08.0] DA: She’s literally like, you aren’t going to need that, you just get a bag and you put that in it. You have two Legos of each color and then you just have everyone pick out one Lego and if your Legos match color, then you’re a pair.
[0:12:24.9] WJ: That’s genius.
[0:12:26.5] MN: Rather than creating an app, you have physical things that will choose the pair.
[0:12:31.9] DA: Exactly. MVP, the MVP was a bag.
[0:12:36.3] MN: A couple of Legos you could get all 23rd street.
[0:12:39.7] DA: That’s when I was like I’m going to 23rd street. I want to get some Legos and then we thought of a couple of other cool Lego things and I’m like “Okay, I’m going 23rd street.”
[0:12:49.9] MN: Go shopping.
[0:12:50.1] DA: I’m going to get a bag.
[0:12:53.1] MN: Going shopping. Did they have both the bag and Legos? I don’t know if they sell bags. You could probably use the Lego bag when you pull out your Legos.
[0:12:59.2] DA: Exactly, yeah I bet you, you get that for free.
[0:13:02.9] MN: Yeah, exactly.
[0:13:04.6] DA: The thing that I was thinking about a little bit is like you know, if you’re building a crud app, you know, when should you design and build a front end? Where does that fit in?
[0:13:15.1] WJ: Man, I feel like that’s – I can’t YAGNI that one, you need that, it’s like, I want you to build the front end first and have one feature that actually works. If you are making a pair trix then I would think the first thing that you would want to do is build a UI where you can show a matrix and then maybe the only value is that they can print it out and write people’s names down on it.
You know, there is something completely goes all the way from the back end to the front end that delivers some amount of value. I would say like the YAGNI bit would be all of the niceties that you haven’t done any user interviews to confirm that people actually want.
[0:14:00.1] DA: Yeah, that’s a good question.
[0:14:03.1] WJ: Maybe that one killer feature that you want like do people want it?
[0:14:08.3] DA: Yeah. Although, I guess like, there’s some value in getting some real data on the page or like something that looks like real data. I know there are some tools that could help you mock out a back end if building a back end might be too much of a commitment for the early part of the project you’re in.
[0:14:26.4] WJ: Or, skip building either front end or back end and use a prototyping tool.
[0:14:30.8] DA: Yeah, like a bag and some Legos.
[0:14:34.9] WJ: I was thinking like Envision but yeah, even better.
[0:14:37.9] DA: Yeah, actually that’s more advanced, yeah. I dig that. You can also go a little higher tech than that.
[0:14:45.7] WJ: Proto IO. Balsamic, I don’t know.
[0:14:50.2] DA: Yeah.
[0:14:51.5] WJ: What do the cool kids using these days?
[0:14:53.7] MN: I think you mentioned the cool kids.
[0:14:55.6] DA: Is that right there? That one’s pretty hot.
[0:14:57.9] WJ: Right, yeah. All right, when is the last responsible moment to get into crypto?
[0:15:02.8] MN: Yesterday. It’s always yesterday, always a will be, I guess I’ve been a huge proponent to crypto currency and just been throwing all my money at it since yesterday and I wishI threw it yesterday.
[0:15:15.6] WJ: I think you’re just trying to trick us into buying in to bid up the price so that you could sell.
[0:15:20.1] MN: Guys, seriously Doge coin is one Doge equals one Doge nowadays so you should definitely get on that.
[0:15:26.8] WJ: You guys have with the Doge coin?
[0:15:28.8] MN: No, that’s Tom.
[0:15:30.2] DA: That’s kind of logical.
[0:15:32.4] MN: That’s the meme, one Doge will always equal one Doge.
[0:15:36.2] DA: That’s the Doge guarantee.
[0:15:37.5] MN: Exactly. Much wow bro.
[0:15:39.8] DA: Yeah.
[0:15:42.1] MN: That’s so great.
[0:15:43.8] DA: I don’t know. Me personally, I’m not entirely convinced, like you know, there are other investment vehicles but don’t have like dog mascots but you know, will provide me the steady return over the many years and so inspired.
[0:15:59.1] WJ: When is the last responsible moment to start investing in like traditional assets?
[0:16:04.7] DA: Yeah, just do a little bit of time, I think the same thing’s true for crypto too honestly. I think you’re not putting all your money, right?
[0:16:12.4] MN: I have a savings account, not throwing all my money in there, don’t ever do that, don’t ever do that but I think what William was saying, even for traditional, you do it a little bit of time and crypto, you play around with that too. Again -
[0:16:29.5] WJ: YAGNI man, who needs retirement account?
[0:16:32.8] MN: You ain’t going to need it until you do.
[0:16:35.4] DA: Least responsible moment.
[0:16:36.6] WJ: We’re going to need that.
[0:16:37.6] MN: Yeah, you definitely need that, we don’t know if social security will be around by the time we’re old. Ladies and gentlemen, be sure to invest, you’re going to need it for sure.
[0:16:51.4] DA: Okay, yeah, this has been financial advice down to the financial rabbit hole.
[0:16:56.4] MN: Exactly. Awesome, cool. For the last responsible moment of this episode, do we have any teach and learns that we want to share?
[0:17:07.9] DA: Yeah, actually, I have been looking more into doing some public speaking and a friend of mine has been trying to organize a Pecha Kucha night which is like a –
[0:17:20.5] WJ: Funny fun word to say.
[0:17:21.6] DA: It’s a fun word to say, I had to look this up online to find the pronunciation, it was a challenge but yeah, basically, it’s just a fun format for doing a talk. Basically, you have 20 sides that automatically transition every 20 seconds and you need to time your talk according to that.
In the end, you’ll be talking for around like six minutes and change and if people just do it on whatever interest them, just to get some practice and feeling comfortable doing public speaking and also like pacing themselves, keeping it snappy.
[0:18:02.5] WJ: I’d love to see someone do that with somebody else’s slides.
[0:18:05.9] DA: Yeah, actually, that was something that she said you can do if you’re like a black belt Pecha Kucha.
[0:18:12.7] MN: Hard mode? Is that like hard mode Pecha Kucha, that’s crazy.
[0:18:16.9] DA: Yeah, you can just randomize the slide deck and then get a random slide deck.
[0:18:23.0] MN: No.
[0:18:23.8] DA: Just go for it.
[0:18:24.6] MN: Hard mode.
[0:18:26.8] DA: Yeah, we were thinking we could ask Madelyn if she’d do it.
[0:18:29.9] MN: That’s crazy.
[0:18:30.5] DA: She’s an improv person.
[0:18:33.0] MN: Cool. All right, awesome, hopefully the Pecha Kucha kicks off and you get the necessary experience, you get the necessary experience to Pecha Kucha.
[0:18:45.1] DA: Yeah, hopefully.
[0:18:46.8] MN: Cool, so this is the finale of the episode. Just one quick reminder to our listeners out there, if you’re interested in climbing, I know that that seems to be a thing that developers do it’s like either coffee or climbing.
[0:19:01.2] DA: Coffee, climbing, coding.
[0:19:03.1] MN: Coding yeah, coffee, climbing and coding.
[0:19:05.2] WJ: C words.
[0:19:05.9] MN: Yeah, so all the coders who climb, Stride event that is being sponsored at BrooklynBoulders but don’t be confused, it’s in Queens. This particular Brooklyn Boulder’s event.
[0:19:18.5] WJ: Baton switch.
[0:19:19.4] MN: Yeah, the good old Baton switch. Yeah good name Brooklyn Boulders.
[0:19:23.2] DA: Hey at least it is not on the Bronx.
[0:19:24.7] MN: Yeah, exactly. Brooklyn Boulders in the Bronx will be extremely confusing. So Stride has an event in Brooklyn Boulders located at 2310 41st Avenue, Long Island City, New York 11101 on January 25th of this year. People who I believe, let me see if I could find the code. If you mention “Stride” you will receive 15% off your admission. So feel free to pass by, we’ll be there from seven to nine in the green room. There’ll be a lot of developers and consultants back there so feel free to come and talk code and climb safely I guess.
I think I will probably be there and it will be my first time climbing on purpose. Don’t ask me what I ever climb by accident. I don’t remember but I’m sure I must have.
[0:20:13.6] WJ: And if you’ve listened to this episode and are subscribed to The Rabbit Hole, it’s actually free.
[0:20:18.4] MN: Woo, the William certified bang stamp right there.
[0:20:22.6] WJ: Guaranteed.
[0:20:23.3] MN: Guaranteed, just feel free to look for anyone of us over at The Rabbit Hole and we’ll assist you in insuring that be the case. Continue on, I’d like to thank my co-host today. Thanks Dave for coming on down.
[0:20:37.9] DA: Thanks man.
[0:20:38.7] MN: And our producer, William Jeffries.
[0:20:41.0] WJ: A pleasure to be here.
[0:20:42.0] MN: I’m Michael Nunez, feel free to hit us up at Twitter.com/radiofreerabbit and if you haven’t, subscribe and give us a five star rating on iTunes. This is The Rabbit Hole, we’ll see you next time.
Links and Resources: