The Changelog: Software Development, Open Source - Product development structures as systems (Interview)

Episode Date: September 23, 2022

This week we're talking about product development structures as systems with Lucas da Costa. The last time we had Lucas on the show he was living the text-mode only life, and now we're more than 3 yea...rs later, Lucas has doubled down on all things text mode. Today's conversation with Lucas maps several ideas he's shared recently on his blog. We talk about deadlines being pointless, trajectory vs roadmap and the downfall of long-term planning, the practices of daily stand-ups and what to do instead, measuring queues not cycle time, and probably the most controversial of them all — actually talking to your customers. Have you heard? It's this newly disruptive Agile framework that seems to be working well.

Transcript
Discussion (0)
Starting point is 00:00:00 This week on The Change Law, we're talking about product development structures as systems with Lucas DeCosta. The last time we had Lucas on the show, he was living the text mode only life. And now more than three years later, Lucas has doubled down on all things text mode. Today's conversation with Lucas maps several ideas he shared recently on his blog. We talk about deadlines being pointless, trajectory versus roadmap, and the downfall of long-term planning, the practices of daily stand-ups and what to do instead, measuring queues, not cycle time, and probably the most controversial of them all, actually talking to your customers.
Starting point is 00:00:39 Have you heard? This is a pretty good idea. By the way, yes, there is a bonus seven minutes at the end of today's show for Plus Plus subscribers. If you're not a Plus Plus subscriber, learn more at changelog.com slash plus plus. A massive thank you to our partners Fastly and Fly. Our friends at Fastly make sure our pods are fast to download globally because, hey, Fastly is fast globally. Learn more at Fastly.com. And Fly lets you deploy your app and your database closer to users all over the world. The best part, no ops required. Check them
Starting point is 00:01:10 out at fly.io. This episode is brought to you by our friends at Sentry and their upcoming developer experience conference called DEX. Sort the madness. This is a hybrid event you can attend in San Francisco or virtually on September 28th. They have an amazing speaker lineup. And I'm here with Sarah Guffles, head of DevRel at Sentry.
Starting point is 00:01:36 Sarah, what's the story with this conference? Well, coding is hard. We at Sentry know this. We integrate with everything that we possibly can to make that process easier for developers, to make fixing errors and performance issues actionable as quickly as possible. And we can't fix this. We can't fix the fact that coding is hard. We can't fix the fact that our ecosystem continues to grow and get ever more complex. So we created Dex.
Starting point is 00:02:03 Dex by Century stands for developer experience. And the goal here is to ignite this conversation, this community around the fact that coding is hard and that we need to come together as an entire industry to solve for the people problems, for the tools problems, for the process problems, whatever the problems are. We need to come together and share various solutions
Starting point is 00:02:24 and approaches to making that developer experience better. And that's why this year we have invited speakers only. We actually didn't have a CFP. We have Gishirmo, the CEO of Vercel. We've got April, who leads GitHub Codespaces. Jewel, who's been an engineering leader at Reddit for over five years. Divya, who is an incredible engineer and leader at
Starting point is 00:02:45 Fly.io, and so many more people that have just a vast amount of experience leading through chaos, leading through these moments of, oh my God, I just took down YouTube, or oh my God, there's this huge outage on Dropbox. And they have a lot of experience, knowledge, and suggestions for how we can get started on improving our developer experience. Okay, virtually or in person, either works. Save your seat now using this trusted Bitly link. That's bit.ly slash dex2022. That's bit.ly slash dex2022.
Starting point is 00:03:22 The link is in the show notes. So look as you're wearing glasses you said these glasses are your brand no one sees you though so this is an audio podcast first but we do have clips so listeners check twitter check youtube for clips but look as you're wearing glasses you said that your brand what's the story yeah so absolutely so um so there's there's not a lot of story about it to be honest you know I just kind of like the you know
Starting point is 00:04:09 Kurt Gendel vibes that they give me you know the slightly you know weird look that's what I'm going for Okay
Starting point is 00:04:15 so like Superman he's Clark Kent with glasses and then he takes them off and he puts the cape on he's so is it the opposite where you put the glasses on
Starting point is 00:04:23 you feel better? Yeah because you put the glasses on for the show yeah now you're superman you're super de costo whichever you want to choose yeah all the info is stored here you know uh quite a few terabytes of data yeah are those google what do they call them glass holes they're so dead now i can't remember the name oh glass holes yes is that google glass do you have your ar goggles going unfortunately not but i definitely get one of those in fact i do have a like some vr goggles here that i bought to try out like some of those you know um oh did you immersive uh workspaces um it doesn't work well by the way i was gonna say they're they're not in use though they're sitting in a box somewhere yeah the
Starting point is 00:05:01 resolution is not not that good you know so if. So if you're trying to do multiple screens and coding and all that kind of stuff, not that great. Yeah, wouldn't recommend. So we haven't had you on the show in a while, but I remember having a great time talking to you, I think it was like three or four years ago, all about text mode.
Starting point is 00:05:18 You're living your life in text, no GUIs. Are you still living the text mode life, or have you resigned yourself to a GUI here or there? No, absolutely. I doubled down on it. So yeah, I'm using, you know, even more weird shortcuts and more command line tools than I was before. So, I mean, like I do have to use GUIs every now and then, you know, because like Google Chrome and browser apps, but if I can use a terminal, I'll use a terminal. What does that say about the advice we might talk about today then?
Starting point is 00:05:50 I mean, is that, since you're obscure on that front, are you obscure in this advice? What exactly do you mean? Well, you've got some pretty hard opinions about productivity for teams and systems and you know, being effective, you know, things like that. So I figured if you're obscure in text mode,
Starting point is 00:06:06 maybe even double downing and extreming, you know. Yeah, absolutely. I'm very good at having strong opinions. They're held loosely though. Okay, good. That's good. Yeah. Well, I have to say I kind of pigeonholed you
Starting point is 00:06:20 into like a command line text mode, like hardcore programmer type. This is the way I thought of you. And I didn't pay attention for a little while. And then I started reading your more recent blog post. I'm like, dang, Lucas goes deep on engineering and software development and all these things that, I mean, like I said on Twitter to you the other day, you're really killing it with your writings.
Starting point is 00:06:48 Lately, I'm just curious, where is this coming from? I know you're an engineer at Elastic, but maybe give us a little bit of the lay of the land of your life, how you're drawing these strong opinions from. Yeah, so essentially I've been doing software engineering for a very long time. I am a software engineer currently. I've been a software engineer for many, many years. But in my previous place, I got to a more management-related role. So I was starting to have to think about how do I organize people? How do I make these people productive?
Starting point is 00:07:18 And how do I make engineers work well with photo departments? So as an engineer, I always thought of things as systems. You know, I always like to look at things and find, you know, the dynamics, discover what are the dynamics by which, you know, those things run. And I was lucky enough to have a very good engineer work with me who had kind of the same mindset and who was also in a similar position before. And he started recommending me all this content about, you know, agile metrics and actually how to see product development as a system. And then I started getting into it. I started reading a lot of Donald Heidner.
Starting point is 00:07:54 So if anyone here is interested in that, you know, Donald Heidner is, you know, by far, I think that the best person to go for this kind of content. Also Daniel Vacanti and started reading all that and started seeing things as a system. As I used to look at code, I started to look at teams. So that's the story. Well, like I said, your blog has been on fire of late. I've enjoyed tons of the stuff you write about,
Starting point is 00:08:18 your stuff on stand-ups, your most recent one, which I think caught fire as well around the world of programmers. Useful engineering metrics and why velocity is not one of them. I have been a longtime skeptic of estimates of velocity of points of a lot of the agile practices. And I think I was most recently on go time talking about velocity with Matt Reier and Natalie Pisonovich if people want more on this topic. But Lucas's thoughts are much more reasoned and explained, and I just kind of rant and rave about certain things. So kick us into this post.
Starting point is 00:08:53 Of course, we're not going to have time to cover all the stuff you've been writing lately. If you like good engineering blogs, load up your RSS reader, throw Lucas's in there, and enjoy as he continues to publish. But this one in particular lays out really not just why velocity is not useful but you kinda describe how we're all thinking about engineering and the process a little bit wrong and so therefore our charts are kinda wrong and
Starting point is 00:09:18 our metrics are kinda wrong and if we just change the way we think about it you can start to have some useful charts and graphs, which even define what useful means. So I'm doing a poor man's edition of what you wrote. Why don't you give us the strong man's edition of what you're thinking about with useful metrics and how we should think about these things? Yeah, absolutely. So essentially, I don't like velocity because basically Scrum is a way of insulating things and limiting the kind of like working progress. That's what Scrum is kind of about, right?
Starting point is 00:09:50 When you have these two experiments, you're limiting how much you're going to do in that time and it kind of like makes things easier to manage, but you can achieve the same effects if you're just doing Kanban. And that's kind of like the premise of this blog. So what I do in this blog is basically model an engineering team as a queuing system. So if you imagine the engineering teams in the center processing tasks, you know, tests are coming in on the left and they're coming out on the right. Essentially what happens is that if tasks come in more quickly than they come out, they start to queue. And when things start to queue,
Starting point is 00:10:20 you have more and more lead time and things take increasingly longer to be done. So one of the common mistakes managers do is to start more things when they see that things won't finish because they think, oh, we're not finishing enough, so let's start more things earlier, which then makes everything take longer on average. So what I do in those blog posts is basically model the system as the queue that I mentioned. And then if you plot on a graph where the x-axis is time and the y-axis is basically the quantity of tasks that you're either getting done or that are entering the system, you can see that the difference starts to increase the larger the difference between the rate of things coming in
Starting point is 00:11:00 and the rate of things coming out. So the greater that difference, the longer the queue is going to be and the longer the approximate average cycle time of things is going to be. So once you start looking at those, when you start looking at throughput, which is the rate things come out, and also the rate of things come in and you match those, then you're always going to have the same distance between the two bands and you're going to have more uniform cycle times because you're not going to allow queues to form too quickly. And when queues form, sure, then you can rely on the troops and get everyone to actually get the time down because otherwise that difference is going to accumulate and queues are going to get longer and longer and longer.
Starting point is 00:11:39 And then the longer the queues get, the more terrible cycle times get and you get even less predictable because if you imagine that things are queuing up, and then everything takes increasingly longer, you're not predictable because everything's going to take longer and longer. Whilst if the rates match, cycle times tend to be uniform. As long as you're finishing what you start, that's a very important assumption. Finishing what you start is important. Unfortunately, it doesn't always work that way adam did you track everything he said there because i was with him like 80 but i'm wondering about 70 let's say 72 and a half percent maybe 72.7 to be precise okay maybe maybe if i give a concrete example that would help that probably would help you so the magical thing
Starting point is 00:12:21 about kanban you know people usually think that the magical thing about Kanban is the Kanban board and you put the post-its there. That's the magical thing. Right. But that's not the magical thing about Kanban. It's very good. You know, it's great to visualize processes. It is magical. But the magical thing about Kanban is that if you imagine a factory, you know, that's producing cars, right? You're first making the wheels and then you're making, you know, the chassis and then you're making, I don't know, like something else. Basically, what Kanban does is it rate matches all these processes so that the pieces that are coming out of one place only come in on the other place when that place is ready to get them.
Starting point is 00:12:55 So if you're making a lot of tires, let's say you've made a million tires in a day. If the next stage of the production process is not ready to receive that million tires, you're just going to have a huge queue so what kanban does is basically they have these like kanban cards where they can regulate you know what comes in into the next part so that each part of the process weight matches and therefore there are no queues and therefore cycle times tend to be uniform now in software engineering the queues well they're, they're invisible. They're your backlog. They're like just bytes somewhere, right? We don't see the queues. But in a factory, it's very easy to see them. So that's the magical thing. And that's kind of like the whole premise of the
Starting point is 00:13:35 process, avoiding these queues to form and rate matching, seeing each part of the process as a queue. Gotcha. That's what it's about. Yeah yeah so one of the things you say is that you see product development structures as systems you said that earlier then you also say not as an art or a series of guesses and where i struggle with that statement is that in an assembly line of car manufacturers you know exactly what it is to create 100 tires and 100 rims. And you know that the rims have to come before the tires and et cetera, like all that is known. And so you can queue things up and you can work on them and then you can have your throughput and you can very nicely fit that thing into a factory. My experience with software is that it's not really a factory, is that it's more like
Starting point is 00:14:25 you're building a custom home. And maybe you change your mind halfway and you realize like, actually, there's a lumber shortage. And so like, there's so many unknowns, and so many interdependencies between the tasks, that it's difficult for me to visualize it in a simple things coming in, things going out. And you've been probably writing software as long as I have, and you're nodding along with me. So these are things you've considered. Can you speak to that, the complexity of the tasks and the interdependencies and the fact that you might change what you're building as you're building it?
Starting point is 00:14:56 Yeah, absolutely. That's a fantastic question. So I've even written about that in a blog post about uncertainty. So you do have unknowns. Now, the important thing is that you're going to make the best possible choice knowing what the unknowns are. So imagine, for example, that you're going to bet in a fight, right? You're betting on, I don't know, Logan Paul versus Floyd Mayweather, you know, whatever it is, right? We know that Floyd Mayweather
Starting point is 00:15:21 is more likely to win and that Logan Paul is less likely to win. That's what the odds are going to tell you, right? That's what the house odds are going to be. Right. Now, the bookmaker's odds. But if your model of reality is better than the bookmaker's, that's when you make money. So maybe the bookmaker thinks, you know, maybe Logan is 10% likely to win, but you think he's 30% more likely to win, right? That difference in the bookmaker's odds and your odds, right? The difference between what you think reality is and what the bookmaker thinks reality is,
Starting point is 00:15:52 that's when you make money. Now, it doesn't mean you're going to make the perfect choice, but it means that if you were to make that choice infinite times, would the payoff, you know, be good? So that's what you're trying to do with product development. Now, the other interesting thing about product development is that's what you're trying to do with product development. Now, the other interesting thing about product development is that you don't have to make a single large bet. You can divide your bets in multiple small bets, which is the interesting thing you've talked about, you know, the mapping dependencies and everything else. So when you're making a bet in a fight or in a horse race or whatever it is, you need to put the whole bet
Starting point is 00:16:21 down. Or like in a lottery, let's say, that's the example that Heinertsen uses a lot, the lottery. So if I ask you to buy a three-digit lottery ticket that costs $30 and you pay all the $30 at once, well, you have one in a thousand chances of getting it right. But if I offer you to buy each digit for $10, well, if you get the first digit right, you're not gonna buy the second.
Starting point is 00:16:43 So you can truncate bad bets earlier and and you're going to save some money, and you still have the same chance of winning in the long run. And that's, again, why I say that scrum is kind of like just one way of doing it, because you're insulating yourself. You're limiting yourself. You're not making those big bets. You're working in sprints. Right.
Starting point is 00:17:00 Some people, they end up doing waterfall disguised as scrum. There's a lot of insane here. The real Scrum is not supposed to be like that. So you are going to be making decisions with incomplete information. But the important thing is that you know what the expected value of the batch you're making is. Because in product development, value comes from uncertainty. As you mentioned, distribution is free. So there's a linear function of value delivered as you make more cars.
Starting point is 00:17:28 Right. When you make product, distribution is basically free, right? You're just pressing a button, it's shipping, you know. That's the magic part. Exactly. That's the magic part. Now, there's another vector of value that you get when you're doing product development. So in cars, the value is linear.
Starting point is 00:17:44 But when you're doing product development, So in course, the value is linear. But when you're doing product development, you can increase the value of all the new products that you're going to ship, because you're building the recipe for the product, not the product. So you actually end up with a new vector of value that you can deliver not only to the customers that you're going to acquire later, but also to the customer that you have already acquired,
Starting point is 00:18:01 which is the whole magic of software as a service. Yeah. If you're Microsoft selling Windows before, well, yeah, to the customer that you have already acquired, which is the whole magic of software as a service. If you were Microsoft selling Windows before, well, yeah, you cannot improve the previous version of Windows. But now with SaaS, you can just ship improvements to the previous version, charge more from everyone. That's where the magic is. Existing customers get to layer on new and better improvements as they use it over time.
Starting point is 00:18:26 And new customers get to enjoy a great product today. And then they begin the cycle again and again. Absolutely, absolutely. And there's multiple ways of breaking down your bets. You can do some A-B testing. You can ship things to a smaller percentage of users. You can ship kind of incomplete things to small percentages of your users, see how that performs. There's multiple ways of breaking down
Starting point is 00:18:49 uncertainty. So you're always going to have uncertainty because that's where value comes from. But the important thing is not that you eliminate uncertainty because then you eliminate value, then you're working on an assembly line, of course. The important thing is that you minimize the economic impact of uncertainty without hindering the benefits. Because that's where value are. Because when you make bets that are unlikely and they turn out to be correct, that's when you make money. That's when the fight example comes in again. When your models of reality are correct, and the rest of the world's models are slightly different from yours. That's where i
Starting point is 00:19:25 get those sayings like fail early fail often right where it's like okay i want to make a bunch of small bets and i want to validate or invalidate those bets as fast as i possibly can so we we iterate and we focus on our feedback loops all that makes. And I think that speaks to the uncertainty part. What about the interdependency part? So we're back to now our queue system and we have requests coming in. What do you call that? Arrival rate. We have the rate of arrival of let's just call them features. And then you have the departure rate. Is that what you call it? The, the throughput, like when it's, and the cycle time is the time it takes to get through that on average, right? So let's say I got three tasks coming in, but task B requires task C to be done before it.
Starting point is 00:20:13 And that's about as simple as you can get with a dependency, right? Like, well, A is fine. We'll work on A. B we can start right now, but C requires B. So CQs. Does your charts that come out of this concept, the cumulative graph, what's it called?
Starting point is 00:20:26 The accumulation? Cumulative flow diagram. Yeah, does your diagrams and does your view of this system, does it account for interdependencies? Does that matter? Is that a moot point similar to uncertainty? Like you're always going to have uncertainty, you're always going to have dependencies,
Starting point is 00:20:39 but actually the times are what counts, so that would be the answer. Answering for myself, I'll stop. What do you think about this? Yeah, absolutely. So in that case, you will have to get it done after you know you will have to get c done only after you do b there's there's no way around it now that won't make a difference in the long run as long as you finish what you start so as long as you're finishing what you start because littles law which determines basically like littles law can be formulated in a bunch of ways,
Starting point is 00:21:05 but the way I'm using it in the blog post basically says that if you start more things, we're going to have longer average of cycle times, right? If throughput keeps constant, because you can't simply ask developers, oh, let's do more, and then throughput goes up magically. That's not what happens. So as you add more tasks, the average time goes up. Right. So yes, you're going to have some tasks queuing, but as long as you
Starting point is 00:21:29 finish all of them, so work never gets to zero when you're doing your job, right? You always have a queue for it. But as long as you're finishing what you start, the average cycle time in the end is not going to matter much because it's a relationship of averages. So the important thing I'd say is not that you cannot have dependencies, it's that you cannot have dependencies too far into the future. Because when you're making long-term plans, the problem is that you're assuming reality is going to be in a particular way. And reality doesn't care much about what people think it's going to be like. And that's where, you know, that's where most plans fail, you know,
Starting point is 00:22:05 because if people could just, you know, forecast, yeah, like if software was a deterministic activity, things would be very, very easy. So you cannot do that. So if you can shorten your time horizons, you can still have multiple dependencies. And I'm not saying don't have a strategy. You can have a strategy.
Starting point is 00:22:21 I'm just saying, you know, you need to be adaptable. So that's what the whole agile thing is about you know agile is not about being fast it's about being adaptable so it's not that you cannot have dependencies or anything like that it's just like the more you can shorten your planning horizons the better things will be the easier it will be for you to adapt to to new situations this is the difference between trajectory and roadmap roadmap is a plan concrete whereas trajectory is, I think we're going this direction and we may land here. Our arc may change.
Starting point is 00:22:50 We may land there, but it's where we're heading. It's a North Star. But along the way, we may zigzag to get there. Exactly. That's the difference. Exactly. That's an excellent way to put it. David Hadamard Hansen said this a while back.
Starting point is 00:23:03 This is not like new news. I'm not saying that you can't take this and coin this by any means, but like way back in 2013, there was Startup Squad, I believe, where DHH was talking about planning as guessing. And then they said it again, I think in one of their books in Rework Potentially.
Starting point is 00:23:19 And then again on their podcast in 2021, where planning is guessing. So like, this is kind of like, almost everybody knows you shouldn't plan, you should trajectory essentially. But is this systemic? Is it like a big issue? Do you think people roadmap versus trajectory?
Starting point is 00:23:34 So I agree with him. I do think you should have the direction in which you're going. And now how are you going to get there? You know, things are going to get in the way. You know, you're going to have to be creative about which strategies you're going to use to go into that direction and continue to make progress. Now, the problem is not with setting the trajectory. The problem is
Starting point is 00:23:52 when you say, like, we're going to go from point A to point B in X amount of time, because then, like, one of the dangers that you have is that you might be incentivizing the wrong thing at all costs. So like, if you, I don't know, imagine you have a sales target and your sales target is X at date Y. Someone that gets to that target on that date, no matter how much they fluctuate and how many people quit because of the attrition and how ruthless that person that wants to achieve that goal is,
Starting point is 00:24:22 that person is going to achieve that goal. That's the problem with having a long-term plan. And also, reality doesn't care that much about what you think. So that's one problem. Now, if you're measuring direction, you know, if you have a predictable sales machine, you know, if you want to use the Aaron Ross term, you know, if you have like predictable revenue and you're going up,
Starting point is 00:24:43 but maybe not at this rate, you know, maybe you're not going to achieve this deadline, you know, if you have like predictable revenue and you're going up, but maybe not at this rate, you know, maybe you're not going to achieve this deadline, you know, at that particular date, but you're going in the right direction and you can make small adjustments, you know, to increase the slope and make it go up. That's better than having, you know, an erratic machine that hits the goal. So that's what I like about setting a trajectory and having metrics that actually measure, you know, consistently how you're performing against that rather than just saying whether you've reached a particular end state or not. So people need to be very careful with their metrics. You know, that's another thing I say on that blog post, which is, if you're just looking at metrics and you're managing exclusively by then,
Starting point is 00:25:24 you know, you're going to make wrong decisions. Because I think Deming has this quote where he says that the measurements of productivity in the United States don't help increasing productivity in the United States. You need to look at the systemic causes of those problems. Metrics, they serve as an intervention point, as a trigger point. So they tell you something looks weird here. Maybe should go and look you know figure out what's weird that's how i see metrics and that's why i think it's important to get metrics that reflect a direction rather than setting a particular goal at a particular time and chasing it at all costs yeah let's do a
Starting point is 00:26:00 hypothetical here so let's say i hypoth, I'm your product manager or engineering manager. I'm above you in some sort of situation. And you're either an engineering lead or individual contributor, whatever you are. And I say, Lucas, we aren't moving fast enough. What are the choices? What are the options? What can we actually do about that? So I think the first question I'd ask you is, what does fast enough mean? What are your goals? I try to understand exactly what you mean ask you is what does fast enough mean? Like, what are your goals?
Starting point is 00:26:25 Like, I try to understand exactly what you mean by we're not going fast enough. Because sometimes we're not going fast enough can mean we're not, you know, delivering enough engineering value or we have too many bugs or we're not achieving this particular business goal. So I need to understand first, what is the goal exactly that you want to achieve? Like, what do you mean with going faster? So since we're making it up, I'll make up an answer so we can continue the conversation. So we're trying to get this new website design rolled out by the end of the quarter. And everything I'm looking at and whatever metrics I have and talking to everybody, it sounds like that's not going to happen.
Starting point is 00:27:02 So we're going to move faster. So first thing I advise is that we look at that problem from when we set that objective. From the first moment we start that project, I will start looking at what our metrics are. Not only our metrics, but getting qualitative assessments on how we're performing against that. Not only when we see we're not going fast enough,
Starting point is 00:27:23 but I will monitor us throughout the whole process so that I can see as early as possible when something goes wrong. I think that's the first thing. Now, let's imagine, as you mentioned, that things have gone wrong at some point. So we're in the middle of the project, something has gone wrong.
Starting point is 00:27:37 So first, I try to think, make a qualitative assessment and look at my cumulative flow diagrams to see whether my assessment makes sense with the metrics I'm seeing. You know, maybe you're seeing a huge increase in tasks in the testing stage, right? Maybe that's the problem. Maybe things are queuing up in test. Maybe things are queuing up in deployment. And then if that's the case, imagine things are queuing up in deployment. You see a huge increase in the size of that bench. Well, then it means you're accumulating lots of tasks to do a deployment all at once, right? Because that's too painful.
Starting point is 00:28:12 You're letting things accumulate, so you can do a large batch transfer to production. Maybe that's a problem. And then when you start adding up lots of things, well, you have a larger delta for errors. So that's one way in which the system can be broken. Now, there are plenty of ways in different parts of the system that things can be broken. So I'd look at the cumulative flow diagram to see the size of the beds, see if anything
Starting point is 00:28:34 is skewing up, to see if there's any particular parts of the process that are painful, and try to get some more predictability, try to make things more uniform, so that maybe we'll see, well, we're not going to be able to hit the deadline with all these features that you initially said. So we need to make a compromise, right? Because one of the things that people get wrong, I think, is that they can simply turn the dial
Starting point is 00:28:57 and things will go faster. But every system will only produce what it can produce. If you just tell people to work harder and do more it's not going to make any difference like no one cheers for their cpu to process numbers faster you know systems produce what they can produce regardless of whether they have a goal it's kind of like that scene from uh return of the jedi have you seen that when darth vader comes up and he's talking about getting the death star back on schedule. Have you seen that one? No, I haven't seen that one. No, I don't remember at least. Yeah.
Starting point is 00:29:27 And he's like, he's reprimanding a general. He's like, I'm here to get you back on schedule because the Death Star is not being done fast enough, according to the Emperor. And I think the guy says something like, we're going to redouble all our efforts. And Darth Vader is like happy with that response. It's like, you can't just redouble all your efforts, right? I guess like we could work, we could all work twice as hard. I guess sometimes people do try that, right?
Starting point is 00:29:49 Yeah. He was saying that before, like you have attrition because of the pressure. And that's almost what you did too with your questions. Like, hey, you know, we didn't hear it, but it could have came off as Lucas, what's going on here? Why are you taking so long? And then you put the pressure on Lucas. Lucas goes back and puts the pressure on everybody else.
Starting point is 00:30:04 The next thing you know, you got two people who are ready to quit already for sure going to quit now because now you put the pressure on and you got, that's the, you know, you can't simply turn a dial unless that dial is well known. And I mean, you can say, well, we're going to hire more people on this project. Sometimes that works. Sometimes it doesn't like the old mythical man month, right? Like more people don't necessarily increase velocity. The other thing is, which was where you're getting Lucas was we could change the scope, right? We could reduce scope. Exactly. Or we examine what we all assumed was a good deadline or a good cycle. I'm not sure which word you're using Lucas, but like something we all agreed on is what you were saying before,
Starting point is 00:30:42 like, what do we agree on? And where are we at from that? Is, are things queuing? Are things getting backed up? You know, where, where's the pain at essentially so that you all can come to the same table and say, okay, this will be agreed on that would happen with an X. And what, why is that not being achieved? Yeah. And you can, the one important thing is that you cannot control the result, but you can control the process. Right. we can do the most valuable things first so that we can have a predictable rate of delivery so that if anything goes wrong, we know early and then we can negotiate scope and then we can get the best business results. And that's my problem with long-term plans and why I say that long-term plans don't work
Starting point is 00:31:34 in that other blog post. Yeah. So when we come to the point where we have the meeting and we all decide we're not going to hit our deadline or we need to move faster or something, something has to change, right? We've now realized either subjectively or experientially or maybe through some sort of metrics that we are behind what we thought we would be. Reality didn't agree with our plan. It's too late for any of that, right? Like we've, the correct thing would have to go back in the past and fix what the problem was back then,
Starting point is 00:32:05 but you can't do that. So starting right now, how do we change the process to address this problem and move forward from here? And what you're saying goes back to the many bets thing, right? It's like, well, the big plan, like why didn't we notice this for six weeks or whatever it was?
Starting point is 00:32:22 Well, we weren't checking our accumulation charts enough to realize that actually this thing was queuing over here and now we're addressing it, but we could have addressed it three weeks ago and solve the problem. Well, let's just stop right here. Some cost fallacy, fix it right now, change our projections or change our scope or change the number of people that are working on it or pay people more to work more on it. Like those are kind of the levers you have. But what you're saying ultimately is the system should be designed in such a way that these things are noticed and adjusted for small course corrections along the way versus that
Starting point is 00:32:55 big, oh crap moment when you realize you're going to miss your deadline. Yeah, exactly. Exactly. Like you cannot decide, well, I'm going to go to the gym today and, you know and in a year I'll be, I don't know, like I'll look this way. Right. But you can control yourself so that you do the things that, whatever the plan that you have is every single day so that maybe you will not get to that exact place
Starting point is 00:33:18 at the end of the period, but you're going to do it in the best way possible and you're going to adjust along the way. That's what i'm saying maybe like and also that's there's there's different types of projects so if you believe if you're building a product well maybe you don't need to set particular goals you know in stone right you can make small improvements now if you're working as an agency it might be a little more difficult for you to make your clients agree to not have a particular deadline, but to work in a particular way, which, you know, some agencies do, which is, you know, and that's better both for whoever's like outsourcing the work and for whoever's receiving the work, because then, you know, they can agree on what's more
Starting point is 00:33:58 valuable for customers and, you know, they get a longer engagement, the company gets more value, but, you know, there's different circumstances. It's hard to say there's a silver bullet. Hey, friends, this episode is brought to you by my friends and potentially your friends, too, at Fire Hydrant. And I'm here with Robert Ross, founder and CEO of Fire Hydrant. And Robert, there are several options out there for incident management. But what is it that makes Fire Hydrant different? The reason that we think that FireHydrant is on to something is because we're meeting companies really where they are. We face the
Starting point is 00:34:51 same problems that every company in the industry that is building and releasing software is also facing. So we want people to be able to sign up for FireHydrant and immediately be able to kick off an incident using the best practices that we've built and we've experienced and have gathered through the other amazing customers that use our tool. It really is a very quick time to value. And we want people to have a long jump from where they are to where they want to be in incident management. Well, we do have good news. Small teams up to 10 people can get started for free with all Fire Hydrant features included.
Starting point is 00:35:26 There's no credit card required to sign up. They are making it too easy to get started. So check them out at fire hydrant dot com. Again, fire hydrant dot com. you mentioned in that same post alternatives essentially to the long-term plans and one you said was planned more carefully which which seems problematic. And then the other one was have a larger margin for error, essentially. And as you describe how you can plan more carefully, you seem to unravel why it actually doesn't make any sense to plan more carefully. Because costs either go up because you spend more time planning and you were actually wrong anyways. But the other seems to be the alternative is have a larger margin for it is either those right.
Starting point is 00:36:26 Are they both wrong? I'd say I'd say both. Like, so I'm not sure if I like the word wrong. I'd say they're suboptimal and the amount by which they're suboptimal for rice. Yeah. So, you know, I'm not saying you should not plan at all. I'm just saying that over planning is better.
Starting point is 00:36:43 That's what most people do. You know, usually you need less planning than you think in terms of like setting particular goals in stone at a particular date, because you're just going to spend more time trying to bend reality and try to think of all the possible edge cases. And something is going to go wrong. Like you cannot predict all the possible outcomes that reality can give you. For you to do that, imagine the decision tree you'd have to make
Starting point is 00:37:10 to model reality properly. It could be even infinite if you're going to do it the ways of physics. I don't know. But that's why the long-term plans don't work. That's why planning more carefully usually doesn't work. So I'm not saying you should not plan.
Starting point is 00:37:27 Planning has its place. It's just don't over plan. And making the plan more careful doesn't prevent delays. That's one thing. Isn't this where sprints and scrum, I think you may not be a fan of scrum, if I can read your words correctly, but isn't that where sprints came into play
Starting point is 00:37:42 where you can say, well, they thought, well, sprints meant fast. Well, it's actually more a measure of time. And you say, you know, essentially make the plan shorter so that you can find out if you're wrong faster. Kind of back to what Jared said before, just fail faster. Same kind of mentality. Exactly. But like the important thing is that you don't need Scrum for that. So Scrum is kind of like I see it's kind of like a management training wheels because it gives you good practices out of the box. You know, just follow the good practices and it works.
Starting point is 00:38:12 But if you understand the principles of why it works, you can make Kanban work in the same way. You know, as long as you don't create a longer queue and you're always revising what you're going to put into the queue, maybe you can have even faster feedback. And you don't need sprints to have meetings at a particular cadence. You can work without Sprints and you can still do retrospectives every X weeks or... But what do you call them then? If you don't call them Sprints, what do you call them? Yeah, it's harder to sell workshops. Right, exactly. I like that. Yeah, we'll get to that too. I love that blog post you have later on about that. You have to have a name for something, right? You have to call it something.
Starting point is 00:38:46 And sprints seems to, even if you don't practice Scrum, you're borrowing the names, the terminology. Even if not the full framework, you're borrowing some parts of it. And you're almost Frankenstein thing. You almost are Dr. Frankenstein making the monster. Next thing you know, it's Scrum Kanban, whatever else there is, like something programming, extreme programming, like all these different ones.
Starting point is 00:39:11 Next thing you know, you have a monster in your hands. Yeah, absolutely. And by the way, I'm not saying Scrum is bad or anything. The book is brilliant. The principles are sound. I'm just saying that if you understand the principles, you don't need to do Scrum by the book, which is by the way, what most people do anyway. You know, it's very rare for you to find
Starting point is 00:39:31 someone that does Scrum exactly as it's written in the original book. But for you to adapt Scrum, it's, you know, you must understand the principles so that you do the correct adjustments. Yeah, that's what I'm saying. I think it's interesting that the term sprint has been somewhat maligned amongst people that I've spoken with because of what you said, Adam, is like, why are we always in a hurry all the time? There is a sense of urgency in the word sprint, but the original point is the small iteration time. It's like we're not going to spend three months on a thing.
Starting point is 00:40:04 We're going to actually regroup after two weeks or one week. But I think that can be problematic when what you think about it is like we're sprinting at all times to everywhere and there's no sort of like stop and catch your breath. There's no time for refactoring, for testing, for all these other things that are
Starting point is 00:40:19 like part of the software development life cycle. And that stuff has creeped into the culture, I think, of software development, where it's always a sprint. And sprint doesn't merely mean we're going to go for a short period and stop. It means we're going to go as fast as we can at all times. Think of this from psychological standpoints, too. If you're always being pushed into a rush,
Starting point is 00:40:42 if your boss is always making you move fast you have no time to be deliberate you don't have you know what i mean like the the psychological standpoint of being in a rush being rushed never being on time always hurry hurry hurry psychologically you're in a state of defense not really offense right so if you're even the terminology is sort of like bad from psychological standpoint yeah well think about it with tdd i mean i've had this where i've been in a rush and i do i practice uh what hello wayne calls soft tdd which is not like the real stringent uh by the books tdd i adapted a little bit but if i'm being honest you know, the TDD loop is red, green, refactor. And if I'm flowing and I'm moving, I'm trying to get something done.
Starting point is 00:41:30 If I'm honest, it's like I'm more like red, green, red, green, red, green. And the refactor just doesn't happen because I'm in a hurry. And that's like, you're doing it wrong, man. But we tend to do that, especially when we have external pressures to make us move faster. We're trying to redouble all our efforts. Or you don't like the refactor. Forget that, man. I'll pay the debt later.
Starting point is 00:41:49 I love refactoring, but I never have time to do it. I got to move on to the next thing. It works. Yeah. But there's a confession for you. Lucas, are you a TDD guy? Yeah, yeah. So I've written a whole book about testing.
Starting point is 00:42:02 And I've written quite a few about testing and I've, I've written kind of quite a few, uh, libraries, uh, related to testing as well. Did a lot of contributions to Chai and Jest and, uh, and Cy, and, uh, SignOn as well. Um, so. Do you ever find yourself skipping the refactor step? So it depends, uh, sometimes. Um, but like, it really depends on what I'm coding, but I, I, I don't also follow it exactly by the book, you know? And I I'd I don't also follow it exactly by the book.
Starting point is 00:42:28 And I'd say if you're following it exactly by the book, actually, it's all what most people think. If you actually go and see what Kent Beck initially said... You got to fail that test. Yeah, but if you go and look at what Kent Beck initially said, he just said, yeah, your test size matches how confident you feel about your code. So you don't necessarily need to write a very small test and always go through the whole loop in all these small iterations every time.
Starting point is 00:42:50 You can adjust it to how confident you feel. So that's, in a way, TDD by the book, if you consider Kent Beck's original book to be the book. Right. I guess TDD by the new book, wherein every step is important and you must be as stringent as possible or you're going to design it poorly. I know there's plenty of people that feel that way. I tend to be a little bit looser with it.
Starting point is 00:43:12 But maybe you just write your code right the first time. Who needs to refactor? Because I just write it right the first time, right? Yeah. One other thing that I wanted to comment on, by the way, was your observation at the moon on always being in a rush and always being busy. So there's also another way of putting it
Starting point is 00:43:29 in this queuing system that we're talking about. Because if you imagine that the processing system in the middle is going to be very busy at all times, it's going to be always at 100% capacity. If that's the case, when something comes in, it queues.
Starting point is 00:43:45 And then things start to pile up and then you have longer cycle times. So actually, what you mentioned about being busy all the time is also counterproductive from a concrete standpoint, from a mathematical standpoint, right? Because if your system is at 100% capacity, it means everything that comes in queues, because the system is completely busy. So operating your system at maximum capacity is exactly what causes queues to form. And that's also some people say that that's why Google has the 20% time
Starting point is 00:44:14 because the optimal utilization rate that you should have is 80%. So if you have 20% time, all of a sudden you have 80% utilization rate. So you have some margin there to deal with urgent things coming up and you don you have 80% utilization rate. So you have some margin there to deal with urgent things coming up and you don't have as much queuing. So there's all that as well involved in, you know, not making people busy all the time. Besides all the other aspects of like creativity
Starting point is 00:44:35 and drawing work and everything else, there's also a concrete benefit to not making people busy all the time. Jared just shared his, He just created a queue himself. He was like, I'm too busy to refactor. Red, green, skip, skip the R. And he just said, he just admitted he's creating a queue right there because he's too busy. He's overutilized. He needs to move on to something else that's-
Starting point is 00:44:57 Refactor later. Yeah. So there's a queue there for refactoring. At some point there's debt that he pays. Or somebody else pays the price. Or it never gets paid and stuff dies. Yeah, exactly. So Lucas, you were talking about the two strategies. I guess we got you on the first one, which is the plan more upfront. We never got to the second one. You're going to respond
Starting point is 00:45:19 to Adam with regards to the relax your constraints or relax your expectations. How do you phrase it? Give yourself more margin for error. Margin for error, that's what I'm thinking of. OK, yeah. So essentially, when you're giving a larger smidge, when you're adding just margin for error, you're exchanging the possibility of being late for the certainty of being late, just
Starting point is 00:45:44 so that you have this small buffer that you can You're exchanging the possibility of being late for the certainty of being late, just so that you have this small buffer that you can write work to. Now, in terms of optics, if you're an agency and if you need to agree to a particular date, or if you need to commit to a date, sure. If you do need to commit to a date,
Starting point is 00:46:02 well, you need to pick a date and you're not going to pick the date that you're more likely to fail. Yeah, what's your upside? Right? Yeah, exactly. Exactly. Exactly. But in that case, you need to acknowledge that you're going to exchange
Starting point is 00:46:13 the possibility of being late for the certainty of being late because you did add the buffer. Now, one interesting way to see this, which I cover in another blog post, is basically trying to use Monte Carlo simulations to make these forecasts. So instead of you just looking at the task and saying, oh, I think this is two story points. Oh, no, I think this one is three story points worth.
Starting point is 00:46:35 And then you get into this endless discussion, and then someone says, oh, no, this number is not valid, because it needs to be on the Fibonacci scale. Why? No one knows why. It needs to be the Fibonacci scale. Right. No one knows why. It needs to be the Fibonacci scale. Right. But.
Starting point is 00:46:46 Because the book says so. Yeah, because the book says so. Now, some people say, oh, because complexity is not linear or the. No. We're not good at estimating. Let's just acknowledge that. It's just the way things are.
Starting point is 00:46:59 So that's one way to estimate things. Now, if you're using a Monte Carlo simulation, you can just get your true perch. You know, you can see, like, how many tasks you delivered on each day, and you can simulate over a particular period of days, and you can see the outcomes you get in all the simulations. So you can run, like, I don't know, 100,000 simulations,
Starting point is 00:47:16 however many simulations you want. Computers are pretty fast these days. So you run all the simulations, and you see, oh, in 95% of the simulations, I ended on or before this date. So you can kind of say I'm 95% confident that I'm going to finish until this date and then you can define what your buffer is, depending on how much confidence you want to add. Now, it's very difficult for you to say you're going to have 100% confidence even
Starting point is 00:47:42 if you pick the last possible date that your simulation gave you, because, well, reality doesn't work that way. But what you're doing when you simulate your team delivering that on a Monte Carlo simulation is basically, instead of just actually delivering once, you're simulating, well, if the past looks like this, and I think the future is going to look like the past. Now, in 100,000 situations in which I'm trying to deliver these things, what are the possible outcomes that I get? And then you use that to make your estimation. So that's one way of doing it. But if you don't have to commit to a particular date, don't. Just break down your experiments, you know, because there's no point in committing to a particular date if you're still,
Starting point is 00:48:22 you know, experimenting things and seeing what works and what does not, because then if you do that you're more adaptable, right? You can change along the way, and maybe that's not the exact place that you wanted to get to by that date maybe something else more important so that's why it's important to know how to break down experiments and be agile in the true sense of the word
Starting point is 00:48:40 In regards to setting a time frame though, there's a law. Since we love laws around here, it's called Parkinson's Law. It's the old adage that work expands to fill the time allotted for its completion. So basically, if you set a time limit, you're almost destined to use that time. Exactly. You'll probably procrastinate to the last day, finish it at the 12th hour, 11th hour, whatever, because that's the amount of time you allotted for it.
Starting point is 00:49:05 But isn't that also why deadlines are useful, though, too? Because we've got to draw a line in the sand. They are useful. Arbitrary deadlines are useful. You've just got to be able to remember that they're arbitrary and pick a new one if worse comes to worse. But hitting something definitely makes you work, I guess, more effectively to a certain extent
Starting point is 00:49:22 or with more urgency? Well, there's an end in sight. Like there's something that's going to happen. Well, the reason why I think it makes sense to say that is because it kind of comes back to you. So you're preaching systems and creating products has to go through a system. It is a system, right? But at the same time, we have to be human, right? So your team, I can't expect you to be a machine, Lucas, But at the same time, we have to be human, right? So your team,
Starting point is 00:49:46 I can't expect you to be a machine, Lucas, even though you're an engineer, you can program a machine, but you are not a machine yourself. So I have to, if I'm your manager, let's say I'm taking Jared's role here, I'm his boss or something like that. I can't expect the two of you to just somehow meet these crazy things. We have to look at the details and be able to be, you know, flexible and resilient in change because the system can predict certain things, but we also have to be flexible enough to be human to say, well, we have systems that are reliable in place, but if we can't plan more carefully and the time we set for ourselves, if both of those backfire we have to be
Starting point is 00:50:25 human and say well something changed here and it's not your fault my fault or their fault it's just that's how it is creating unknown systems while we're driving the car essentially you know so we have to be human in this process exactly exactly i i do like to say that you know there's no coding solution to bad culture. There's some things you cannot solve with tools, you need to solve with culture and with a particular way of working. I totally agree with that. Now, with regards to what you said about deadlines,
Starting point is 00:50:55 I don't like seeing things as deadlines. I like seeing things as preemption points. So when your operating system starts running a program, it doesn't know when the program is going to end, right? That's the whole, if you do, you're going to get a Nobel Prize. You're going to solve the, I don't know how to pronounce it, problem, the halting problem. But the computer simply doesn't know if the program is going to finish running. So it just knows that it's going to run
Starting point is 00:51:25 that program for a particular amount of time, and then it has a preemption point. So it's going to interrupt that program, and it's going to start running other things. And you can do the same in your development process. You can start a task. If the test takes too long, well, you have a preemption point.
Starting point is 00:51:42 You have this, I don't know, maybe you set a limit in JIRA, which makes a preemption point. You have this, I don't know, maybe you set a limit in JIRA, which makes a task go red once it reaches, I don't know, five days in progress or something. And then at that point, you have a preemption point where you say, why is this taking longer? Is there anything that we can do to deliver now? Do we need to cut scope? Are we trying to solve something that was not originally scoped? Did someone misunderstood something here? So you don't need deadlines to have preemption points. And having those preemption points is the important thing.
Starting point is 00:52:13 That's how I see it. What's the difference, though? So the difference is the deadline, it needs to be finished at that point. Well, it's in the language. Dead. Dead is in there, right? Deadline versus preempt, which is to prevent. Right. So it's probably just in the language itself.
Starting point is 00:52:32 Yeah. So preemption allows you to control things along the way because you cannot determine. So the problem with the deadline is that you cannot simply just like get all the way here. And then you say, oh, we didn't reach the deadline. And then what do you do? There's nothing you can do. You didn't hit the deadline. You change it. That's why I said you have to realize that it's arbitrary if it's an arbitrary deadline. Yeah. Yeah, exactly, exactly, exactly. You need to realize, yeah, and in fact,
Starting point is 00:52:52 all deadlines, they are arbitrary in a way. Yeah, but that can be, my point was that that can be useful in the case that you need something to motivate you to finish a thing because of Parkinson's law, as Adam stated, is we can just continue to toil away and become engineering astronauts or architecture astronauts
Starting point is 00:53:10 or whatever it is. Without a deadline, we're never going to ship a thing. I just know that personally. I just never do it. So I have a nice deadline. We do this Kaizen episode of Ship It every 10 episodes,
Starting point is 00:53:21 and we try to work on things around changelog, make them better, the platform, the systems, et cetera. And I know that every two and a half months, we're going to go on a podcast and talk about what I accomplished. And so when that sucker is coming up, like we're shipping stuff, you know what I'm saying? Like that's arbitrary. Like we made that up. It means nothing. I could go on that show and say, didn't ship anything this time and nobody would care. But it's very useful as a motivating factor for me to finish some stuff that was my point is sometimes arbitrary deadlines are very useful things now you have to realize they're arbitrary and so maybe that's why you prefer to call
Starting point is 00:53:52 something else but we did because we just won't finish stuff half the time you know like if you're like finish it whenever it's ready like it's a posture thing right isn't it a posture thing you have a different posture to a deadline yeah as you have to a preemption point. And in your case, Jared, I can totally see the usefulness in the systems point where there's many people, not just you. Preemption points might be more like, did we ship it? Why didn't we ship it? How can we ship it? Do we need to move things? You know, it's a posture. Yeah. I don't believe we should just have one deadline six months from now and then check after six months. I believe in the iteration process and stopping and retrospecting. We had a thing called deadline and pray. You put a deadline out there and just pray you shipped it, okay? Deadline and pray. Yeah, exactly. That's hilarious. Preemption is, I like that. Preemption point is pretty, I think it's a good thing. But I also like deadlines too. As long as you don't get fired for missing one, right?
Starting point is 00:54:55 The psychological effect, it is the same. Maybe deadlines is an easier name to understand. More people get it straight away, so maybe it's better. I'm 40 years old. I haven't heard of a preemption point until today. So deadlines, I think more people are going to connect with that. Although I'm always open to learning new things. So that's interesting. Well, there is some pressure with deadlines too. It's like, you know what? I got to get this thing done.
Starting point is 00:55:14 Yeah. At what point then do we talk to users? Like we're just in ourselves right here, right? We're in our own teams. Like, did we ship? Why didn't we ship? Can we be more careful? Can we give us more margin? Can we shift the name from deadline to preemption
Starting point is 00:55:29 point to just soften a little bit? You know, can we be a little psychological? But at what point do we actually talk to customers and get their feedback to iterate and essentially see if our assumptions were correct and to fix their problem? So I'd say users are always the best source of feedback. Now, it doesn't mean they're going to tell you exactly what's right or what's wrong. That's for you to figure out. But it's your job to go and talk to them to get some feedback. So it's not your job to go and crowdsource solutions, but it's your job to go and see
Starting point is 00:56:01 what the problems are so that you can design the best solutions. Because if people could design solutions themselves, they would do it. So whenever you need feedback, instead of just confabulating in a room with 10 other developers and discussing what would be better. Well, if it's like a small enough piece of work, why don't you just ship all of them and do some maybe testing? Or why don't you just ship the easiest possible option and see if people use it? Because I've seen it quite a few times where you've built a feature, you shipped it, there was a lot of pressure to deliver that feature, and you're now thinking, everything went great, the feature is out, people will love it. And then that feature breaks. But you only realize the feature was
Starting point is 00:56:43 broken a few months later. Well, in main, no one told you the feature is broken, no one was actually using it, no one even noticed the feature was broken. So instead of confabulating and trying to just guess what users like, maybe go and get a feedback early and that's part of what we were talking about making the smaller bets, buying the cheap tickets you know one at a time so whenever you need to break down your plan and get that small quick feedback you know go and talk to users i like the way you presented initially which was you had uh this big this big deal soon you'll be calling it a 500 page book with diagrams you're gonna convince
Starting point is 00:57:23 people it's a framework we're trying. Then you're going to sell them a workshop for 50 grand, which will do a fireside chat with the CEO or something like that. And then you'll, I just like the way you presented the whole entire idea. It was pretty cool. When it's just really just a TTYC. Yeah, I'm still up for the $50,000 workshop. Still up for that?
Starting point is 00:57:41 You're for hire. Yeah. If you pay $50,000 for me to go and do a workshop of a one page blog post, we may be able to chat. The thing is though, Lucas, you don't understand how often that is the exact issue.
Starting point is 00:57:55 I know of a case recently, good friend of mine, situations in defunct, and iterate, iterate, release, new product, pivot, all these good things, all those keywords. Are you talking to your users? No, no, no.
Starting point is 00:58:11 What? How are you not talking to users? How are you burning cash? How are you losing in the game? How are you so close to the red line and you're not talking to customers or anybody who's even using the thing, let alone a customer. How are you iterating?
Starting point is 00:58:28 How are you pivoting? How are you putting out new stuff if you've never talked to anybody? Let me psychoanalyze real quick. Not your particular friend, but in general. Please do. I think we're afraid of what they're going to say. Yes, 100%. Yeah, I mean, we want to be right. We want to assume we know exactly what needs to be shipped, or we want what we want in the world, not what they want in the world.
Starting point is 00:58:51 Right. That's probably the cases, but I suspect your assumption is probably more correct, which is fear. We don't want to hear that we're wrong. We don't want to hear that what we're making is not right, not solving their problems, because that's just too hard. Especially when you got a big bet on the table. That's why smaller bets, or at least a good reason to go to smaller bets. Yeah. I mean, I think you fear talking to your people because, well, all the work you put out there was in vain. The work you are putting out there is in vain. Yeah, hurts. But what hurts more to Capit is failure, complete failure. That hurts way worse because now you have no opportunity to serve the customer because now the relationship is gone. The company is dead. There's no trust in the market. There's no trust in the product and you've lost your chance to win. So talk to your customers. A stern warning from Adam Stack.
Starting point is 00:59:45 Lucas, as an addendum to this post, you're talking about velocity, how it's not a good metric. I love at the end, you actually define what makes a good metric. One of these I've keyed in on a long time because a lot of times, even Adam and I,
Starting point is 00:59:58 we look at certain metrics or we're like, here's a chart. Should we track this? Should we track that? And one thing we always ask each other is, is this actually going to change? Is this knowledge going to be actionable? Are we going to change our activities based on the chart?
Starting point is 01:00:14 Or is it simply to feel good or be curious or whatever? Stare at a dashboard. And I love these three characteristics you list out. That one in particular, number two, it's actionable. The first one you say is it's not a target, which we have talked about Goodhart's Law many times on the podcast. It seems like it's so relevant to so many things. But the idea there is if you're tracking velocity,
Starting point is 01:00:42 like we got eight points done last week, and your boss likes that number eight, but they don't like the number seven, well, you're going to find a way of making that number be eight the following week or whatever it is, like we just game these systems. So those metrics, velocity, if it is just based on a number, not very useful in that way. And then the last one, you say it has a clear relationship to other metrics with characteristics one and two. Can you explain that one in better detail? So we have one, it's not a target because then it gets gamed. Two, it's actionable, meaning you can look at it and actually change something. And then the third one, can you explain that one?
Starting point is 01:01:18 Yeah. So essentially, if you have a single metric for a system, there's many other ways for you to improve that metric by making other metrics worse's many other ways for you to improve that metric by making other metrics worse. So you need to establish some boundaries, some quality metrics to get there. And the important thing is that you know what the relationships are between your metrics so that for you to get to this place, you know what leverage you can pull to get to this place and how getting to this place is going to affect your other metrics. So for example, you know, if you're going to start more things, well, if you're going to start more things, if you're going to finish early, well, if I increase the
Starting point is 01:01:54 arrival rate, what happens to the other metrics? What happens to my system? How are people going to work? Is that actually going to get me there? And if it is, what are the consequences? What other levers can I pull to get to this way? So that's what I mean, because when you see things as systems, you need to be aware of the second and third and however many others effects that you have. So you need to know what is going to change as you pull the different levers. Semi-tangent from this, but a good sidecar. Remember Woody Zool, Jared?
Starting point is 01:02:28 I do, yes. He mentioned Russell Ackoff and something that he was famous for quoting, which was because managers can't figure out how to measure what they want, they start wanting what they can measure. Right. So it's like you could be the manager, whether you're the business owner, stakeholder, PM, engineering lead, whatever. You kind of have to feel like if you don't know what to measure, you measure what you can.
Starting point is 01:02:53 And in this case here, what you can measure, what you begin to measure, whether it's right or wrong. Yep. What gets measured gets managed. I think it's Peter Drucker who said this, but I'm not sure. Yeah. Yeah, for sure. And you can only grow what you measure too. I mean, so these are all good reasons.
Starting point is 01:03:07 On the flip side, there's a positive thing. Like there's another adage that says, you don't grow or change what you don't measure. So if you don't pay attention to it, then you can't influence change because you're just not tracking its history, its trajectory. There's positives to measuring. And there are things that you may not be able to see
Starting point is 01:03:25 in numbers, you know, and that's why it's so important for managers to understand the actual work that is being done and be able to do qualitative assessments. And Deming talks a lot about that in his book, Out of the Crisis, as well, about how, like, managers should be able to understand what work their people are doing on the factory floor so that they can do a qualitative assessment of what's going wrong here. So imagine, for example, the deployment example I gave earlier, right?
Starting point is 01:03:50 Where the deployment process is painful and it's accumulating lots of things. Well, if you're a manager who's never done any software engineering, you're going to look at that bin and you're going to see, oh, deployments are slow. What do we do?
Starting point is 01:04:03 Why is that? You have no idea. So you need to be able to understand so you can make a qualitative assessment. And of course, you can rely on your people to give you opinions. So metrics will not do the management work for you. They may serve as an alert.
Starting point is 01:04:16 They may give you interesting insights. But if you manage exclusively by metrics, you're going to miss a lot of information. This episode is brought to you by Sourcegraph. Sourcegraph is universal code search that lets you move fast, even in big code bases. Here's CTO and co-founder Byung-Loo explaining how Sourcegraph helps you to get into that ideal state of flow in coding. The ideal state of software development is really being in that state of flow. It's that state where all the relevant context information that you need to build whatever feature or bug that you're focused on building or fixing at the moment. That's all readily available.
Starting point is 01:05:10 Now, the question is, how do you get into that state where, you know, you don't know anything about the code necessarily that you're going to modify? That's where Sourcegraph comes in. And so what you do with Sourcegraph is you jump into Sourcegraph. It provides a single portal into that universe of code. You search for the string literal, the pattern, whatever it is you're into Sourcegraph. It provides a single portal into that universe of code. You search for the string literal, the pattern, whatever it is you're looking for. You dive right into the specific part of code
Starting point is 01:05:31 that you want to understand. And then you have all these code navigation capabilities, jump to definition, find references that work across repository boundaries that work without having to clone the code to your local machine
Starting point is 01:05:42 and set up and mess around with editor config and all that. Everything is just designed to be seamless and to aid in that task of, you know, code spelunking or source diving. And once you've acquired that understanding, then you can hop back in your editor, dive right back into that flow state of, hey, all the information I need is readily accessible. Let me just focus on writing the code that influence the feature or fixes the bug that I'm working on. All right. Learn more at Sourcegraph.com and also check out their bi-monthly virtual series called DevTool Time covering all things DevTools at Sourcegraph.com slash DevTool Time. so a metric that you vouch for is the cumulative flow diagram we've been talking about it with
Starting point is 01:06:40 regards to things in things out how long they're in the cycle what's accumulating what is not have you put this into practice in your daily work and seen benefits from this regards to things in, things out, how long they're in the cycle, what's accumulating, what is not. Have you put this into practice in your daily work and seen benefits from this particular metric? Yeah, I've done this before. And basically, so besides the cumulative flow diagrams, I think there's other things you should look at. So that's the main visualization, because that's the easiest way to see your process from end to end. So that way, it's very easy to see what bands are growing and what bands are shrinking. So yeah, that is a very useful visualization. Now, it's not the only visualization.
Starting point is 01:07:13 That's one important thing to highlight. There's other important things that I've used much more than the cumulative flow diagram, which are, for example, scatter plots with the cycle times of different issues. I found that much more useful in the past, to be honest. So if you look at a scatter plot with the different cycle times and you see that something is going up and up and it's highlighted on the top, like in the 95th percentile, well, if something is on that high of a percentile, it means there's something different on it. It's something that's making it take longer than 95% of the issue. So that's when you get a preemption point and then you go there
Starting point is 01:07:49 and you ask, what's wrong with this issue? What do we do to deliver it faster? So that's also a very useful visualization. Now, besides that, there's also flow time. So what percentage of time is something blocked? So if something is flowing 90% of the time, so if it's not blocked, then you have good flow. If you have 50%, if it's not actively being worked on 50% of the time, you're having a lot of context switching. You may have more things in your process than you can handle. So it's also important to look at that. So there's all these things you can look at
Starting point is 01:08:21 and looking at them as a whole is the best way of doing things, I think. So once you look at those things, you can come to a perspective and you can say, besides the quality of assessment that you're going to make, you can say, oh, I've seen that in the past however many weeks, things have been accumulating at this point, or I've seen that things are getting blocked a lot. And I've seen that we've got many tasks that are deviating from what we had before so these are all ways of using these and you're always going to have to make a qualitative assessment in one way but um if you have these it's easier to guide a discussion as a follow-up are there any tools or software suites or ways of making these particular charts easy to use or available without too much effort?
Starting point is 01:09:09 Yeah, so I think there are a few products that do this out there. The one I've used before is Actionable Geometrics by Vacanti, which I've used specially because I've bought his book, which is excellent, by the way. I don't know if Daniel's ever going to hear this, but it's an absolutely brilliant book. And I do think it's his company. I'm not sure. But anyway, I've used that before and it was very useful. I do think that pieces of software other than Jira, if I'm not mistaken, do have some of those as well.
Starting point is 01:09:39 But the one I've used before is called Actionable Agile Metrics. It's a Jira plugin. I think it's also available for a few other task management pieces of software. You called Actionable Agile Metrics. It's a Jira plugin. I think it's also available for a few other task management pieces of software. You said Actionable Agile Metrics? Yes, exactly. Is that a book as well? Yes, there is a book,
Starting point is 01:09:55 which is really good. It's a book with a plugin. It's a plugin with a book. Yeah, so, well, they've done a very good job of educating their users so that they can get value of this complex, in a way, product that they're selling.
Starting point is 01:10:08 Yeah. So the book is really great. I really, really enjoyed the book. There's plenty of talks by Vacanti on YouTube and on Vimeo. They're absolutely great. And also, if you're looking for resources, besides the book and besides the plugin, there is also Don Heinze's book called
Starting point is 01:10:23 Principles of Product Development Flow, which is probably my favorite book of all time in terms of product development. It was one of the most transformative books I've ever read in my career. It's a dense book. You'll probably need to get back to it in a few times. One of the main reasons I've been writing so many blog posts is because I always go back to the book to review a few things and and always kind of get something new out of it. It's a great, great book.
Starting point is 01:10:48 And there's yet a third book by Vacanti about estimations precisely, I think it's called When Will It Be Done, which talks about how to do these forecasts using Monte Carlo simulations and things to pay attention to and all of that. So those are all excellent resources for those interested in seeing product development more as a system. Have you tried the Monte Carlo move? Have you tried estimates that way, or you just avoid estimates altogether?
Starting point is 01:11:15 So I've played around with that. I have never committed to a particular estimation that came out of a Monte Carlo simulation. I've looked at that. It's very easy for you to get some insights, but I haven't committed to a projection I've seen there. If I can avoid committing to a particular date, and if I can instead influence the process and align with the different stakeholders so that we have a cadence of meetings along
Starting point is 01:11:38 the way so that we can discuss what we're going to do next, I usually prefer to run things that way. So even if you're, I don't know, maybe someone asked you to agree on a particular date with the marketing team. Well, instead of doing that, maybe I'll ask, well, instead of me agreeing to a particular date, why don't we set up weekly or bi-weekly meetings
Starting point is 01:11:59 with the marketing team so that we can adjust as we go and we can get better results and we can sync on where we are and all that and we can always give you an update picture of where we are and everyone works together to make those small bets so you know things will not work if you just you know one part of the company makes is trying to make small bets while other parts are trying to make huge bets uh you know it's uh things need to be. I'm not saying everyone needs to work at the same cadence. It's just things, companies as well, needs to be thought of as systems.
Starting point is 01:12:31 So even the way you determine the hierarchy of the company, how you distribute resources across it, you know, all of that is a system and it needs to be really carefully thought through. Also collaboration is a system. Like you just pointed out that rather than say, here's the deadline, go off, do the thing by yourself, assuming let me collaborate with the marketing team, with the sales team, with whatever interconnected team has a concern or care about what we deliver. So that, I mean, that's going to be more fun too. They're going to work with you.
Starting point is 01:13:03 They're going to see Lucas is a real person. He's got a family. He enjoys these kinds of shoes. He's got, you know, special glasses that make him feel cool or actually is cool. And then, you know, trees out. Pretty cool. But they know who you are, right? Whereas if it's just a deadline and a timeframe and you either meet it or you don't, there's a lot to assume about you, which is just simply whether you passed or failed, not how do we iteratively get there in a story? How do we tell our company story? How did it, how did I get to understand what marketing really needs from me so that I can deliver better? And that might even motivate you more about understanding more of people's backstories and more how other teams will benefit when this
Starting point is 01:13:45 ships on time. You know what I mean? Like that's, there's a lot more to it than just simply the system itself. It's the collaboration is a good system as well. Yeah, absolutely. Absolutely.
Starting point is 01:13:53 I think people underestimate, you know, how important it is for you to actually know your peers and know how they're going to, you know, react and, you know, how to communicate effectively.
Starting point is 01:14:02 All that is, is, is paramount, you know? And we can talk a lot about systems, but if you don't have a good interpersonal relationship, those systems fall apart, for sure. What I'm saying is that is a crucial part of the system.
Starting point is 01:14:16 It's not like the system and then that too, the relationships aside from the system, that is the lifeblood of the system, the relationships that get formed. Yeah, absolutely. It's just much more harder to measure because it's not as tangible but it is it is part of the system for sure yeah right crucial part of it well lucas we have had a fascinating conversation here the only thing we haven't touched on is you tearing apart people's stand-ups i don't know if we want to make time for that if we want to just save that for a future conversation.
Starting point is 01:14:47 We definitely have to have it back on the show. You have lots of interesting insights. I love how you go into these books and you read them and you pull out the good bits and then you give them to us in your blog posts. It's just spectacular. It's like Blinkist but for not Blinkist books. Yeah, exactly.
Starting point is 01:15:00 It's good stuff. Adam, what do you think? Should we call it a show? I think it's worth it. Yeah, I mean, there probably isn't one listener out there listening to this that isn't part of a small team, whether it's a two person that has some sort of ritualistic meeting, whether they call it a stand up or not, that basically says this is what I'm working on. This is where I'm blocked. You know, and answers those questions that you typically answer at a stand-up. So I think it's like somebody, probably unanimously everybody listening to this show
Starting point is 01:15:28 is in some sort of meeting once a week or some sort of timed basis that answers questions like that. So what do you have to say? Good and bad stand-ups. Help us out here. So when it comes to stand-ups, I think that I find that people ramble a lot. So when you follow a model where you're trying to say what you've done in the previous day and what you're going to do today and all that,
Starting point is 01:15:49 people are going to inevitably start to ramble. And a lot of the information is not important for your peers, especially if you're... So if you're working a two or three people team, yeah, it's easy for everyone to pay attention to what you did yesterday and what you're going to do tomorrow. But if you're working a team that has more than three people, it's going to be very hard for you to pay attention to what you did yesterday and what you're going to do tomorrow, but if you're working in a team that has more than three people, it's going to be very hard for you to pay attention to all this small granular level of detail that everyone has.
Starting point is 01:16:13 So to avoid rambling and to avoid making meetings long and unproductive, what I'd say is just get your camera on board, go from left to right, and then look at the test they're there and ask people whether they're blocked, whether they need any answers, or if everything's okay. Because if everything's okay, people don't need to tell you what they were doing yesterday. You're probably going to review the code anyway. You don't need to know all the granular detail of what they did because stand-ups are not made for people to prove they're productive. Stand-ups are made for people to get blockers out of the way. In a way, daily stand-ups, what they do is produce daily preemptive feedback. You know when I've spoken about that interruption point on your operating system
Starting point is 01:16:58 which causes things to be stopped and something else to run or something to be, I don't know, for a process to be terminated or something like that. So that's the daily stand-up. Daily stand-up causes the system to produce synchronous feedback every single day so that you can see whether something is wrong and fix it. If something is not wrong, you don't need to fix it. There's no need to start with Technobabble or whatever it is. You just say everything's okay and you move on. Things get shorter and more productive. People don't ramble. They like their stand-ups and they actually realize that their stand-ups are created for them to get them blocked. So if the person
Starting point is 01:17:36 that usually runs this stand-up cannot participate in the stand-up, people still do the stand-up because they still find it valuable. Now, if you're just telling each other what you've done yesterday, what you're going to do tomorrow, people are probably not going to find that valuable. So they're not going to do it when the person that runs the stand up is not there. So, you know, that's how I like to see stand ups and how I think we can we can make them better. So if it's just about unblocking, then could you just come to the meeting and say, are you blocked? Yes or no? No, no, no, no, no. End meeting. You know what I mean? Or yes. Okay. Why are you blocked? Yes. Perfectly valid. Do you think you'll be blocked this week? Can you hypothetically think you'll be blocked this week?
Starting point is 01:18:15 Is there a possibility to be blocked? Yeah. Yeah. That's a good question too. So that's one of the things that you could ask as well. But if people know that that meeting is made for them to be unblocked, basically they're, you know, they're going to have that in their minds. You can incentivize and you can ask that. I think that makes a lot of sense. It's a very good question to ask. But I think also, if people know that that's a meeting for them to get unblocked, if they
Starting point is 01:18:39 have a question that will influence the way they're going to implement something, they're going to ask that question, you know, maybe they're not necessarily blocked, but they would going to implement something. They're going to ask that question. Maybe they're not necessarily blocked, but they would like a particular answer. They have uncertainty. Yeah, exactly. So yeah, they have some kind of uncertainty. Yes, yes. So that's the place for you to talk about something.
Starting point is 01:19:01 But let's say you've been writing some code and everything's going okay. And you spent yesterday writing the code. You've written a few tests. Everything's okay. You think you're going to be able to finish it today. You've got, you know, everything's still clear in this specification. There's no reason for you to be alarmed. Why would you spend a lot of time explaining the tests you've written, the lines of code you've written, all the possible implementation paths that you've tried?
Starting point is 01:19:20 Why do that? Isn't that what PRs are for? Exactly. It's like you're going to review the code anyway. So, yeah. Right. And you could do that in a code review or a PR or something like that. It's a different process. Yeah.
Starting point is 01:19:31 I almost feel like you can answer, you can determine because you will hold space in your calendar and in your mindset for a meeting. Let's say it's in the morning. Stand-ups are usually the first thing you do or one of the very first things you do. So, you'll sort of bake the initial part of your day around the possibility of this meeting. What if the day before everyone knew if there should be a meeting tomorrow and only those who are blocked or uncertain should show up. And if you feel like somebody else could help you become unblocked or more certain, call them in even if they're not blocked or they're blocked or uncertain. You know, if there's a dependency, essentially, you can determine that the day before. That way, no one's morning is jacked because of a meeting that doesn't need to happen.
Starting point is 01:20:13 And if you've got code review, well, hey, there's my PR. Yeah, absolutely. You don't need a stand up to, you know, send a message on Slack to someone and say, hey, I have a question or hey, I'm blocked. Can you help me out? You don't need to wait for the stand-up. The stand-up is one formal way of ensuring that happens. But like, you don't necessarily need that. And that's one thing that I think people don't realize. You know, in the software engineering industry, we sometimes do things just because that's the,
Starting point is 01:20:39 you know, that's the way that other people have done it for a few years. But we haven't, you know, asked ourselves whether those are things that were worth doing. It's like, what's the purpose of having a daily stand-up? The purpose of having a daily stand-up is not to have a daily stand-up. There is a purpose behind it. What's that purpose? Can you achieve that purpose some other way that makes more sense to your system?
Starting point is 01:21:00 And then we go back to Scrum. I'm not saying Scrum is bad. Scrum works. But why are you doing Scrum? Where does Scrum come from? Where are the benefits coming from? Can you get them in any other way that's better for your case? That's, I think, what people need to think more about.
Starting point is 01:21:16 Well, like anybody would use scaffolding or framework. You know this. I'm not preaching to the choir here. But they use it because they have no prior experience or very little experience in being effective. And so Scrum is the best training wheels to use. Very effective. It's a good starting place. No one got fired for trying Scrum when there was no experience, right?
Starting point is 01:21:37 Like you at least made an effort towards productivity. If you went willy-nilly and you had no idea what you're going to do, you didn't do scrum, you didn't do agile, you didn't do whatever, then you might get fired. You're like, did you not read that very popular book? Everybody's doing it. Lean this, do that. Come on, you're out of here. Have you guys heard the story of the newlyweds and the chuck roast? You've probably heard that story. I have not. Please tell it. All right. So you have some newlyweds and they are going to have a dinner and the wife cooks her family chuck roast recipe. So she takes the chuck roast out of the oven and she lops off the two ends and serves it that way.
Starting point is 01:22:17 And her husband's like, why are you lopping off the ends? They're perfectly good. You know, she's like, I don't know. That's just the family recipe. I'll ask my mom. So she goes so she goes to her mom she's like mom why did we lop off the two ends of the chuck roast as part of our recipe she's like i don't know i got that from your grandma and so she goes and asks her grandma grandma why did we lop off the two ends of the chuck roast for this recipe and she says well because the whole thing wouldn't fit in the pan my pan was too small moral of the story don't just do things because that's the way we do them. You have to know the reasoning. Well, that's why we have these conversations, is to question why, to dig deep.
Starting point is 01:22:50 And I think you have, Lucas. You've got several blog posts we'll link up in the show notes. Jared and I have either fully read them or loosely read them, as you can tell through the show. Definitely quoted a few, brought in some laws, brought in some family recipe stories and whatnot. But is there anything we didn't ask you, Lucas? Anything we can close on that you just have to say before we close out? I don't know.
Starting point is 01:23:10 I'd say question your assumptions, understand the dynamics of your systems. And yeah, I'd say that's my general advice, but I cannot think of further questions there. Question your cues, right? Look at your cues. When all else fails, are you queuing? And if you're queuing, why? I got that from your blog post. That's your words, not mine.
Starting point is 01:23:31 It's a paraphrase, of course. That's your word, not mine. Yeah, I think Donald Heinrichsen says that queues are the biggest source of waste in product development. And I think that's the quote. I think he says that the problem is in product development is rarely idle engineers. It's more often idle work products, just sitting around and queues.
Starting point is 01:23:53 Features not being enjoyed. Yeah. Or not even being shipped. Bringing the lake to customers, retaining customers, attracting customers, giving marketing, something to talk about, sell something to pitch. All these things. Yeah. Or just sitting in a GitHub repo. That's not in production.
Starting point is 01:24:10 That's not prod. Lucas, thank you so much for your wisdom, man. Thank you for sharing all this and thank you for coming back. Can't wait to have you back on again. Thank you. Awesome. Thank you very much for the invite.
Starting point is 01:24:18 It was an absolute pleasure to chat with you. Thank you so much. It's always fun, Lucas. You're welcome back anytime. So much was covered in today's show and so much more could have been covered. It was awesome having Lucas back on the show, going deep on product development systems
Starting point is 01:24:36 and structures. And if during this show, you find yourself curious at all about his thoughts on all things text mode, well, hey, here's a clip from that episode. If you had to think about what was the most important thing, you seem to be focusing a little bit on the speed because you say you feel like you're a little bit closer to the metal so to speak maybe there's an analogy with
Starting point is 01:24:53 you know driving a car enthusiasts like like a manual transmission uh regular people like an automatic transmission is the speed really key for you i don't think actually the speed is the key for me uh i think of course it's more comfortable to use a keyboard all the time. But actually, most of the time, I don't think we're writing code, right? I think most of the time we're just like reading, we're thinking. And what I really feel that makes a huge difference for me is that I don't feel like there's anything on my way when I'm transposing thoughts to code you know just it's so much faster and it's so automatic now also I can switch between like environments like
Starting point is 01:25:36 often when I pair with co-workers I can just you know like open a terminal windows and open and I'm fine without plugins, without anything. So I'm like good to go everywhere, I don't need to install anything. Also like even if I need to, configurations are a lot more portable. I think there are many more advantages rather than just being fast. I mean being fast is cool, right? I mean when I'm doing a talk and I'm doing live coding, if I open Vim, I know that the subject of the questions are going to be about Vim, like at least 50% of them. Right. And the other 50% about live coding. Yeah, it's just like, it's fun, but I don't think it's the main reason why I use Vim.
Starting point is 01:26:17 Probably what got me started, but not what keeps me going in it. You can find that at changelog.fm slash 340. That is episode 340. A big thanks once again to our partners Fastly and Fly. Also to Breakmaster Cylinder for those banging beats. And of course to you Hey++ members, don't forget you have a bonus
Starting point is 01:26:37 seven minutes after the show today, so make sure you stick around if you're not a++ subscriber. It's too easy. Head to changelog.com slash plus plus. Directly support us. Make the ads disappear and get access to bonus content on our shows. All right, hey, that's it for this week. Thank you so much for tuning in.
Starting point is 01:26:53 We'll see you on Monday. Outro Music

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.