Embedded - 402: We Are a Lazy Species

Episode Date: February 18, 2022

Chris Svec of iRobot and Phillip Johnston of Embedded Artistry join Christopher and Elecia to talk about the hows and whys of estimating software schedules.. The article that started the discussion wa...s Agile Otter’s Platitudes of Doom.  You can participate in these sorts of discussions on the Embedded Slack Channel by supporting Embedded on Patreon.  On Phillip’s Embedded Artistry Website you can find a library of courses, hundreds of free articles, and even more member's only content. Their current focus is developing two new courses: Designing Embedded Software for Change and Abstractions and Interfaces. There are also many great posts on planning and estimation.

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to Embedded. I'm Alicia White, alongside Christopher White. I know this is weird, but I'm really excited to be talking about scheduling and planning this week. We have invited Chris Svek and Philip Johnston to join us again to give us their opinions on the subject. I thought we were talking about genres of music and best decades for music. You swindled me. Yeah, there are different show notes for you these days. All right, well, I'll see you later.
Starting point is 00:00:37 Hello and thank you to the show. Thank you to the show. Thank you for... It's time to play the music. It's time to light the show. Thank you. It's time to play the music. It's time to light the lights. Hello, and thank you both for being on the show. Hello, thank you for having us. Hi, Chris Speck, who I will refer to henceforth as Speck, and hello, Philip. How are you? Hello, I'm doing good, and thanks for having me back on the show.
Starting point is 00:01:03 Speck, could you tell us about yourself? Sure. I'm Chris Sweck. I am a longtime embedded software engineer, and currently I manage the embedded software engineering team at iRobot. And Philip, what about you? I'm Philip Johnston. I run embedded artistry with my wife, Rosie. We're a consulting firm and an embedded systems education company. And I'm primarily an embedded software developer, but I've also worked as a project manager, both officially and unofficially. What is an unofficial project manager? Like, is that like you sneak in in the evenings and like do project management when no one's around?
Starting point is 00:01:41 What is that? It's kind of like that. You know, if you're on a small startup team and nobody is trying to rein in the chaos, that's usually when I would just step in and try to put some order in place. Got it. And you said teaching embedded. What's that about? We have a number of courses that we sell, but also for a long time, I've just been trying to take some of the lessons I've learned throughout my career and actually document them and share them with the community. Because I think it's been difficult as a professional embedded systems engineer and software developer to figure out the best way to tackle some of the recurring problems that we find. You know, we're always reinventing the wheel. So just been trying to share what I've learned in hopes that it helps other people, you know, take that and do something even better with it. Embedded Artistry, which is Philip's company, has a great newsletter and a great blog. So just
Starting point is 00:02:37 don't want him to take this part out. Well, thank you. Okay, we want to do lightning round, but instead of it just being short questions and short answers, we want short reply times. So please answer quickly. I don't have the document open. So you're going to have to give me 30 seconds here. It's time to play the music. It's time to lighten the night. I'm the, I'm the editor. I can remove all this stuff. I have, I have great, I've been in your show enough to know that you can cut a lot of stuff out, man. I can cut it all out.
Starting point is 00:03:09 It can be like the, what is it, 432 or whatever. Okay, I'm ready. You want me to go first? Are you ready, Speck and Philip? Yes. Yes. You need to defuse a bomb. Do you cut red, black, green, or blue?
Starting point is 00:03:24 Green. Blue. You're both dead. That was going to happen anyway. VI or EMAX? VI. VI? I don't really like either.
Starting point is 00:03:36 Spaces or tabs? Spaces. Tabs, hardcore. Oh, wow. C or C++? C++? C++. Star Wars or Star Trek?
Starting point is 00:03:47 I'm pretty heavily in the Star Trek camp. I'm going to have to go Star Trek. I'm sorry. Okay, well, that's it. I've had it. How do you pronounce G-I-F? Gif. Gif.
Starting point is 00:04:01 God, this is great. This is great. We are opposites. JPEG or PNG? JPEG? I'm PNG all the way. Mac or PC? Mac.
Starting point is 00:04:14 Mac. Oh, well, see, there we go. Everybody's happy now. Peace in the land. The two of you are on the embedded Patreon Slack group, and you got in a slight disagreement. And like a bunch of grade school students, we made a big circle and watched. And it was great, though there was no name calling. And I think you ended up hugging it out.
Starting point is 00:04:36 Are you sure? Anyway, can you fight for our amusement now? I'd love to. It'd be a great great pleasure i i should say that what happened is that philip posted a a blog post about estimation and i got stuck about a paragraph in on something the person said and i didn't read the rest because i was just like look that this it bothered me and i stopped it right there and i made some comment about it and uh philip said no no no that's not the point that's not the point.
Starting point is 00:05:05 That's not the point at all. And so we kind of went around a little bit there. And eventually we ended up arguing. I at least ended up arguing both sides of like estimates, good idea, bad idea, when you need them, and a few other things. So it was apparently entertaining enough that you wanted us to come on the show and have it out. So, yeah, let's do it. I believe, Philip, you didn't like the idea that software is unable to be estimated. That is true.
Starting point is 00:05:39 It's usually, I guess, positioned as estimating software development tasks, or it's generally impossible, and so we shouldn't bother. And that kind of annoys me because it's a big part of our business practice and the way that we engage with clients. And I think that we do it quite well, having only once missed a deadline that we set, and that by two weeks, which wasn't very far off overall. And so if I feel like I can do a thing well, and it's claimed that it's impossible, there's a mismatch there somewhere. And so Svek, do you think it's a waste of time to try to estimate software schedules? So in reality, first I have to say this, in reality, I think software is estimatable, and it is necessary to do it, even if you don't think you're going to do a very good job. And it is absolutely a skill that you can improve on and both for yourself and for your team.
Starting point is 00:06:33 So that's my actual opinion. I think it's necessary for many, many reasons. I think it's good. But I guess maybe I'll talk a bit about what hung me up on the article. The article, which I... We probably should mention the article and link to it. I don't remember what it was, so maybe make a note to... I have it here.
Starting point is 00:06:56 It's... Platitudes of Doom or something. Yes. Platitudes of Doom from Agile Otter. Tim Odinger's thoughts on software development well the piece that i got hung up with was that in the beginning it says in software development the primary input to today's efficiency is the quality of the code we have written until now if that code is clean bug-free well designed and well organized then today's task will be
Starting point is 00:07:21 reasonably estimable estimatable so that's the biggest. So the premise of that is if code is bug-free, then we can estimate it. And that's where I stopped. That's not fair to Philip's intent for the article. Well, that is absolutely where I stopped saying, like, look, we're not good at estimates. And if you tell me that, that's almost like an excuse, like saying, well, if the code's not bug-free, then I can't even estimate it. Now, maybe that's not what the author intended. But when I read it, I was just like, come on, that's almost like an excuse like saying well if the code's not bug free then i can't even estimate it now maybe that's not what the author intended but when i read it i was just like come on that's ridiculous that is just ridiculous so i did read this but it was a while ago and and as i am want to do i did not prepare for today's podcast um so philip that that paragraph
Starting point is 00:08:01 reads to me as very weird not just for the reason that chris, I know you're not arguing necessarily for the article or anything. I'm just trying to understand. What about software that hasn't been written yet? That, by definition, has very clean inputs because there isn't any. No bugs. No bugs at all. So when I'm estimating software, I don't usually have a pre-existing body of work that I'm building upon all the time. Well, how long is it going to take you to do that driver you're supposed to do?
Starting point is 00:08:30 I don't know how long it's going to take because I've just started reading the data sheet. But I will have an estimate at some point, but it's a bit ineffable. So for the sake of this, would you like me to just say, estimates are stupid, there's no point to just say, estimates are stupid. There's no point in doing that. No, no. Just take that.
Starting point is 00:08:47 No, I'm just saying, for the sake of argument here, should I just take that to start with and then have Philip say, well, I don't think that's true. And then we can just go back and forth and see where it goes. But I think in reality, there's a middle ground. But I think I'd like us to find that middle ground somehow. And yes, Feck, if you're willing, there's a lot of good reasons why people don't estimate and why they find it difficult. If you are willing to play that role, I would appreciate it because we do need to dismantle some of this. And there is validity in the idea that you need to have perfect bug-free code to start? No.
Starting point is 00:09:27 Okay, so what does the rest of the article say before we get into this? Wait, I had terms I need to identify. Oh, go for it. What does ineffable mean? Cannot be effed. Cannot be understood. And Zweck, this one's for you. What is estimable? The word in the article is estimable?
Starting point is 00:09:51 Is that a word? It is a word, but it doesn't mean what he thinks it means. Oh, it doesn't mean is capable of being estimated? No, you pointed out that it actually means capable of being liked. Esteemable.
Starting point is 00:10:07 Which I will take the position, the radical position, that no software is capable of being liked. I think that's just the truth. Computers were a bad idea to begin with. Okay. So we may say estimable, estimatable, but what we mean in either way is estimatable, not whether or not we like the schedule. Okay. So the rest of the article went on to say that things were estimatable? The article I don't think was about estimation at all,
Starting point is 00:10:46 which what I think was where I was frustrated in that particular moment was 12 years ago, he could have had an editor that deleted that entire paragraph, and there would have been nothing lost to the article. In fact, I could argue based on what happened as a result of that, the article would have been better, but that one paragraph struck. The article's purpose was if you think that you're not getting what you want from your software development team because they're not working hard enough, then that's a problem. Because the work that your team can do is probably pretty constant and just wanting them to do more and expecting that they can and, you know, pushing them to do more and more work just to meet some deadline or, you know, for whatever dysfunctional reasons we come up with inside
Starting point is 00:11:38 of our organizations, that doesn't work. And so what's the right way is probably to do less and to pick what you do in a way that what you do provides more value than the stuff that's left undone. I think that was ultimately what the point of the article was aiming at. Okay. And then that just led to the side discussion that we're having now. So, Svek, why is estimating difficult? Estimating is difficult because by definition, you're doing something you haven't done before. And so you, you know, there's the famous, you know, you know what you know, and then you know some of what you don't know.
Starting point is 00:12:22 And then there's plenty of unknowns, unknowns. You don't know what you don't know. And then there's plenty of unknowns, unknowns. You don't know what you don't know. So one of the reasons why estimating is difficult is because you are predicting the future and we all know we're not terribly good at that. Estimating is difficult because frequently you don't know exactly what the thing is that you are trying to estimate, especially in software. There sometimes are not requirements that are very well specified. The person or the group asking for a thing doesn't know exactly what that thing is. And so by definition, if you don't know what you're going to do, it's pretty hard to estimate what it is or how long it will take to get there. Those are kind of two of the more common ways or common reasons why it's tough. So we're not good at it.
Starting point is 00:13:10 And even if we somehow gained skills at it, most of the time, the definition is such that we can't, it's not defined. We can't estimate something that isn't well-defined. Right. And I mean, a very poor or response to that is to say, look, this is tough. We don't actually know. We all know that we don't know exactly what we want to build. So let's just throw up our hands and not give an estimate and it'll be done when it's done. And we'll figure it out along the way. And whoever's asking for a schedule, you know,
Starting point is 00:13:42 go away. Just, you'll get it when you'll get it. Leave me alone. And so that is... It does take a long time to put together an estimate, especially if you're trying to do a good one. Exactly, exactly. And again, I'm playing devil's advocate here.
Starting point is 00:13:55 But yeah, that's time spent on creating a schedule is time that I could have spent building the thing you wanted me to build. So again, leave me alone so I can get to building it faster. Time spent learning to code is time I could have been spending coding. Well, no, I mean, haven't you ever been in a meeting where it's a schedule update and it's just totally useless?
Starting point is 00:14:15 I worked at a place that had a wall of a room that was just the schedule. Every wall was covered in Microsoft Project. Well, I think that's where a lot of the dislike of estimates come from. I mean, I can think of every scheduling meeting I've ever sat in at any company I ever worked in other than my own, where it was just one or two hours, usually at lunch, when you want to be out having lunch with your friends or at the beach or doing something else.
Starting point is 00:14:41 And you're just having somebody pull up a list of tasks that you've never heard of before. And for the first time you're hearing about it, you get a one or two sentence summary of what it is. You've never looked at any code. You're not thinking about the problem and you have to give an estimate. And we just keep doing this in circles around the room until we have a plan for the next two weeks or a month or whatever. And then everybody's surprised at the end of that, that for these problems that nobody put any thought into at all, that they came up with crazy wrong estimates. So of course, if that's your experience, it's like, that's absolutely horrible. And I hate it just as much as everyone else. But there's another experience where I
Starting point is 00:15:18 actually put in a lot of time for my estimates. I thought about it. I thought about when it needed to be done. I broke it into little pieces. And I spent a long, long, long, hideously long amount of time thinking about it. And then when I showed up at the scheduling meeting, they said that was impossible. It was too long. And I was wrong. And they didn't take my estimate, which turned out to be perfectly valid. We just slipped every week until we were at my schedule. And I wasn't just estimating for myself. This wasn't me sandbagging. This was me estimating for a whole team. And we were right on time, according to my estimate.
Starting point is 00:15:57 But they wouldn't take it. My last full-time position, that was exactly why I quit. They set a schedule before they even had a firmware developer or a project manager. So Rosie and I had joined this company together, and we came up with a schedule that we thought was an aggressive schedule. There's a lot of risk involved, but we think we could hit this schedule. They just didn't want to accept it because it was, you know, two months after their target ship date. So I quit because I just wasn't going to do that again. And, you know, looking for the news updates, they shipped two weeks after the schedule that we created, you know, and so it was like, that totally happens, you know, and I think part of
Starting point is 00:16:42 the dysfunction too, you know, maybe that's another symptom is going from we have a schedule and we need to like that estimate, the discussion, I don't think, should be around whether or not that estimate is valid as much as now you have a tool that's shown you that you probably have too much work for whatever time frame that you have. And there's always valid reasons for why we have to ship in September instead of November. And if that's a valid reason and that's not negotiable, then I think having an estimate and seeing the scale of the work in front of you, even if it's wrong, even if it's wrong by 250%, you have something now to discuss and see what other levers you can
Starting point is 00:17:40 pull. What things can you take out? What can be released in a software update? What features were we just really aiming for to try to differentiate ourselves, but they're not really core to the experience? You know, there's a lot of different ways you can manage the estimate is too long versus the time we have available problem. But I constantly, at almost every job I've ever worked, I've been told by management, oh, you engineers, you don't know how to estimate anything. You would take all the time in the world if we didn't give you a lockdown schedule date, which I bristle at every time it happens, but it happens just about every time. And I don't know where engineers got that reputation. At one job, I worked very hard
Starting point is 00:18:23 on an estimate with my colleagues for a product and told the people it would take two years because it was a medical product. It was very complicated. And they hired outside consultants to come in and tell them how long it would actually take. And, of course, they kept getting the answer two years, and they didn't like that. And it took four or five years because they didn't actually start for three years because they kept trying to find a shortcut. But I guess where I'm headed with this is it's one thing to come up with an estimate it's another thing for an estimate to be believed and or to be accepted and your your solution was to quit but that's the extreme solution in a lot of cases people can't always do that is there a
Starting point is 00:19:03 question in here i don't know i've got a i want to i want to go back and make sure i understood what what philip just said um real quick um chris so philip what i'm hearing is that you know what i what i think you said is that we some group comes up with a schedule and sometimes for a very good reason valid business reasons we must launch in September. And, you know, a skilled estimator then comes up with, OK, we can launch everything you want in November. And there's some valid reason that everyone agrees to this is, look, September is it. So it sounds like what you're saying, Philip, is that that point that even if the schedule is wrong, as long as we agree that September is it, then we can start to have a conversation of saying, what scope do we need to cut?
Starting point is 00:19:49 So is it kind of a schedule scope conversation there? Look, if we've got to hit September, that means I can have X, Y, and Z done by September, but not A, B, and C. Well, I'm going to answer your question by stepping back and trying to do a judo move. And you can tell me if I didn't do that adequately. So I think, you know, what's the fundamental problem we're dealing with? It's that we are beings that operate in time and we can't get out of that. And time is a scarce resource that you can't get back. We have other scarce resources for doing what we need to do.
Starting point is 00:20:23 You know, money, hardware, rare earth elements, whatever you pick. We're constrained in a lot of ways. And we're also social beings. So we're working in groups to achieve things. It's like we're not working alone to try to solve problems. And if we are, then who cares about your estimate, really? It's like you don't have anybody to answer to or to coordinate with. Don't worry about estimation. Probably doesn't matter. But given that we're operating in time and we're in groups that are doing things together, and we have a lot of different teams that are trying to synchronize their own work to fit within the, you know, the constrained resources we have and to come together to deliver a product, you need some way to determine what work gets done and whether or not the, you know, we can estimate in different ways.
Starting point is 00:21:11 Whether the estimated cost, the estimated time is worth the, you know, the estimated value that is going to be delivered to our business or to our customers from doing that particular thing. And so sometimes it's that there's a fixed schedule with a good date and we need to figure out what it is. But sometimes it's that we have 10 teams that we need to coordinate to all land, you know, to ship a product. We need our marketing team to have their stuff ready at the same time. We've got to have the hardware ready. We have to be able to manufacture it. We have to have our supply chain in order so all of our parts can get there.
Starting point is 00:21:46 We need to be able to distribute the product. You know, there's just all these different concerns that have to line up. And to do that, you know, we all have to kind of guess at how long our work's going to take and what we can get done in a certain period of time and make our efforts line up in some way. And I think that's the fundamental goal we're always trying to solve when we're working in groups. All right. That was an excellent judo move. I believed everything you said, except for the supply chain part. We all know that part doesn't work. Right. Fair enough. Yeah. Right now you have infinite time to work on your software because you can't ship your hardware i guess backing backing up if i mean i think we started this
Starting point is 00:22:30 thinking oh maybe we could do kind of a debate but it seems like we're we're kind of uh stating about some different things about why estimates are good and like when they're valuable and i think two thoughts come to mind one you need to need to have like the people who are involved here, you know, the quote unquote business people and the quote unquote engineers. There needs to be a level of trust and respect if, you know, a deadline and a schedule are going to be a useful task as opposed to kind of like an offensive task or, you know, a weaponized task or something like that. If, if the business has a schedule and they don't care what you say, and they're not willing to, they're not willing to negotiate, um, you know, what, what scope might go into it. And if they're just like, look, I don't care. Everyone worked 400 hours a day because we have to hit September. It doesn't matter. Like no, no, no better schedule or no better estimating techniques is going to help you there. But fortunately I've mostly been in places where, you know, whether it's the business or the market or marketers or whoever it is that, that needs
Starting point is 00:23:34 the thing or the other people who are depending on the engineering to get the thing done by a certain date, it's usually a pretty healthy, healthy relationship there where, okay, we need it by September. Okay, we can't get it for you by September. Let's sit down. Let's have some trade-off discussions. Let's talk about what we can get done by September. And then can we ship a patch release in October or November? But if we go in supposing like an adversarial relationship between the CEO and the business
Starting point is 00:24:02 development and the engineers, you're kind of hosed from the start. You can't see me, but I'm standing up and cheering over here because I fully agree. And I think that it's interesting that so much of the discussion around estimates is not actually, you know, and I think we're doing it here today as we talk about our experiences and where we see the value, but so much of the discussion of the problem with estimates isn't necessarily around the difficulty in estimating and when it makes sense and when it doesn't, as much as how tied into dysfunctional team activities it is. It's almost like it's a hammer we use to beat other teams with or beat down our own people with. So I fully agree you have to be able to work in a team where trust is present.
Starting point is 00:24:49 But, but, but, but, but, but, but, but. Hang on a second. Software engineers really are bad at estimating things. I mean. Some software engineers are bad at estimating things. Almost all starting software engineers are bad at estimating things. Most software engineers are terrible at software engineering as well when they start. And I, again, I shouldn't be arguing this because I'm not supposed to be arguing the
Starting point is 00:25:12 estimates are stupid, but it is a learnable skill if you focus on learning it. And if you don't, then you're not going to get better at it. And I think on that, to piggyback on that, I think a lot of the problem is how often is there really a feedback loop? You know, it's like if you set up a feedback loop of here's what I'm predicting and you write it down and you do the thing and you compare and then you analyze what you did to try to figure out why your estimate was so wrong and whether you have a fundamental flaw to address or whether it was really a one-off thing that you couldn't have predicted and, you know, okay, just maybe I need to increase my fudge factor next time. You know, like that often isn't there. So if you don't practice a skill, of course, you're not going to be good at it. It's, you know, you didn't come out of the womb
Starting point is 00:25:58 being good at developing software, nor did you come out of the womb being good at estimating how to do software, how long it's going to take you to do software work. It's interesting because I don't see the only software estimation tool that I've ever seen that actually gives you that feedback was FogBugs, which is Fog Creek Software, and they had this feature they added. I'm looking at it on Google here. It's EBS, evidence-based scheduling. And so if you used it correctly, my understanding is that you entered an estimate for all your tasks, and then you entered how long it actually took. And then over
Starting point is 00:26:30 time, you, hopefully the engineer, not just the program manager or product manager, but hopefully you, the engineer would see, oh, I have a tendency to underestimate by 50% these sorts of tasks, but actually I'm pretty close on these other sorts of tasks. So it seems like that kind of feedback is necessary to actually learning how well, you know, how well you do estimate and then hopefully getting better at it going forward. Are there any other tools? Yes. Yes. And I'm, I'm, I hate myself for saying this, but that's, isn't that a big, and I have something
Starting point is 00:27:03 else to follow up with this, but anyway. We all do. Isn't that a big... And I have something else to follow up with this, but anyway. We all do. Isn't that velocity in Scrum? I remember we're doing Agile. Every sprint or whatever, we'd total up the points and see how many points we actually did, and they would keep track of who said what and what points there. And then for the next sprint, we would only do the number of points
Starting point is 00:27:23 that we actually made on average. I mean, it's not down to the level of detail of the kinds of things that uh and i'm not arguing for this it's not down to the level of detail the kinds of tasks take this long on average for this person but it was this team is able to accomplish this many points whatever those meant on average and therefore we should only schedule that many points. That was the goal, right? I have many complicated feelings about Agile. I think the whole, like, you know, seeing how long, well, first of all, the fact that Agile quite dishonestly says that points is not the same as time, when in fact they always are. Like that right there just shoots, shoots any credibility has in the foot. But the, the, uh, let's see the, the time horizon of agile is like one week sprint,
Starting point is 00:28:12 two weeks, three weeks sprint. And so you only get to estimate short things. And I think that is fundamentally different than estimating longer things. And I actually want to go back to something. I'm going to take this a totally different direction real quick, and please edit this out if it doesn't make sense. But when Alicia said in the first place, she said, hang on, I went and I built, I spent good hard time and I built a, what ended up being a correct estimate. And I had to think about it. I had to sit down, I had to spend hours, minutes or minutes and hours actually diving in, breaking up big problems into smaller problems, breaking those smaller problems into even smaller problems,
Starting point is 00:28:51 and then estimating it out. I think fundamentally, human beings do not like expending energy, period. We are a lazy, lazy species, and I am absolutely part of that and so estimating is a very mentally difficult task because build you know build me an embedded bluetooth temperature monitor okay sure that'll take a month okay that like that's all the that's all the energy that my brain wants to use on like i i forget which books i've read but our brain actually doesn't like expending energy because it wants to be efficient. Right.
Starting point is 00:29:27 So exactly. Are you, are you groaning? Well, I'm the, I want to respond to what he said first, because I totally disagree. I,
Starting point is 00:29:38 I've enjoyed, I think of estimating as a critical part of design. If you can't design, then you can't estimate because you don't know what you're building. And so I've always enjoyed the estimation process because I consider it part of the design process. What am I building? Here are the pieces that I'm building. Well, okay, how long are those going to take? What feeds into them? What do I feed into? And not to be, you know, bragging, but every time I've sat down to do that at a company and designed and estimated a long-term project, I've been right.
Starting point is 00:30:11 I actually am going to stop you there because that is a really, really, really good point that is going to come up more later about how estimation and design, um, really overlap. And I want to go back to feedback and learning the skill of estimating. Cool. And the way I got to it was at LeapFrog, where I had to estimate a whole bunch of different toys and how long things would take. They were reasonably well-specified,
Starting point is 00:30:38 and then I also had to enter the hours I spent on each toy. And at the end of the projects, after a couple of years of doing that, I was kind of had my own fudge factor figured out. And the person here who is probably the best at estimating is Philip. And I want to know how he got good at it. How did you get that feedback? He went for a coffee. Beyond that, how do you do it? What is your process? Because you do something that in consulting I find terrifying.
Starting point is 00:31:09 Fixed bid projects. Fixed bid projects. What does Philip do? Because I think we all know on the call, we all know what Philip does, but maybe Philip should explain that. Sure. So something that I practice within my business that is very different from every other software consultancy I've ever known. And people just, you know, sling a lot of insults about this and say it would never work and I'm a fool. But I practice fixed pricing for all of our projects with very rare exceptions for hourly work when it really makes sense. But when it really makes sense is never risk. It's usually
Starting point is 00:31:43 just like, yeah, you can call me whenever you need to to ask me a question. I'll bill you by the hour. So, you know, how we got good at it is just I've been thinking about it for 12 years and getting this feedback continually. Originally with, you know, making estimates for how long things would take because I was asked and writing that down in a paper notebook. And, you know, originally I was working on government projects, so we had to log all of our time spent on each project. And so my timesheet was just a great summary. But, you know, I was already kind of in the habit of tracking how long individual tasks took and what project it was allocated to. And so I kind of had that data to compare to. And just, you know, trying to figure out why I was wrong, I think it always revealed
Starting point is 00:32:33 some obvious things, but that's a different direction we can go in. So this sounds like deliberate practice, which is... Deliberate practice it is. Yeah. So it's a little pop culture kind of a thing. You know, Malcolm Blabell's 10,000 Hours that he popularized. I forget, I think it's some Florida university. He actually kind of came up with a lot of it. But it sounds like you're doing a thing over and over again,
Starting point is 00:32:57 and you get to see pretty concrete measurement of how far off were you. Right. And, you know, when I'm far off, it's always a question of why. I guess before we get back to the business thing, I'll just say why it tends to happen. What I noticed is I have had a consistent tendency to, one, estimate that I would spend eight hours a day working on a given task. And in reality, what I spent on a given task was closer to two hours a day, which is, you know, when you're measuring your time and you see that it's pretty alarming, but the other six hours a day are lunch and meetings and
Starting point is 00:33:35 people stopping by your desk and you went to get coffee. And then there's this urgent issue you really needed to take care of with QA. So you could get that software release out on time. And so it's like, I gave an estimate because I thought I would spend eight hours a day on it and I spent two. And so of course my estimates are wrong. And then there's all these other things that I noticed, like, oh, I'm estimating how long it takes me to write the code to solve a problem. But that's not the time it takes to clean up the code so I can get it ready to actually submit and have it reviewed by my peers. It's not the time I spent testing the code. It's not the time I spent writing the documentation. It's not the time I spent taking the review feedback and, you know, adjusting that,
Starting point is 00:34:13 the implementation based on the feedback and resubmitting it, and then fixing the CI failure that was reported based on my new changes because I didn't test things properly. You know, so I just would habitually miss all of that, which is, you know, if you just estimate how long it's going to take you to write some code and you're not thinking of the 80% of the work around the code that you're not thinking of, it's like, you know, of course you're going to be wrong. And so I just, for myself, I noticed that I had this personal tendency to make these assumptions or to ignore these vast areas where I just, you know, I'm clearly doing work that I'm just not accounting for when I'm thinking of how long it's going to take me to do the work. And I still, you know, I get caught now because I have a partner. So whenever we're making a proposal for a client, you know, we go through what the client wants. We think we have a pretty good idea.
Starting point is 00:35:04 We meet with them until we're sure what the project looks like. We try to limit our scope to three months at a maximum because once you start getting longer timelines, I think chaos and the world and the changes in the environment just dominate. And we break down the tasks. We do the sort of, you know, traditionally what you would think of in estimating. What are the tasks we need to do?
Starting point is 00:35:28 What are those decomposed to? How long do I think it's going to take? And then I have Rosie, who was a project manager, I think for 20 years now, you know, give or take a few years, review my work. And she can always find things that I'm still failing to account for. Like a big one is I'm failing to
Starting point is 00:35:45 account for the time that she's going to spend on the project, you know, or I put in all the time for how long it's going to take me to do the work, but I forgot to put in all the time it's going to take me to talk about the work with the client or to, you know, the necessary time delays I need to account for because the client needs time to get me feedback that I can respond to. So I think it's still, you know, I'm still learning and getting the feedback on the things that I've failed to account for. But I do think part of that practice that's let me get to a point where I feel confident in my estimates is I do get that feedback. And I get often get that feedback early enough that I can adjust my estimate before I actually hand it over to someone.
Starting point is 00:36:27 Is being told that we as engineers are bad at estimating contribute to people not wanting to learn the skill, not wanting to bother or find value in it? Of course, of course. I mean, you like doing things that you are good at. And if you think you are bad at something, you're not going to want to do it. If there's a culture of, you know, if you are fortunate enough to work for, with Philip or Rosie there, you're going to see, look, estimates are possible. You have to sit down and think them through and think through the, you know, the decomposition of problems and estimate, but you're going to see success. and you're going to know that, oh, I'm a new college grad.
Starting point is 00:37:07 I'm not good at estimating today, but it's a skill that I can learn. And here's evidence of it. But on the other hand, if you just listen to the old adage that estimates are wrong, we're bad at it, end of story, then why would you spend your time on it?
Starting point is 00:37:21 You're arguing the wrong side, Svek. Yep, sorry, sorry. Philip is wrong. Philip is wrong. Philip is wrong and his business is out of business and he doesn't realize it. Can I ask Philip a couple of questions and feel free to not respond to these, but I want to understand a little bit better because I am not one of the people saying you're crazy for doing this. I'm actually in awe that you do this. Are there kinds of work that you would be
Starting point is 00:37:48 hesitant to estimate like this, to give a fixed bid for? If I hand you, oh, I need an I squared C driver for this chip, you might be able to say, okay, that's going to be this much. If I said, I need a subsystem for a chip that's brand new, that's never been used by anybody else before, here's their brand new alpha data sheet. Would that also be fixed or would you just estimate that in a different way and make it perhaps a little bit longer? How do you gauge, I guess, the known unknowns and the unknown unknowns in terms of the fixed estimate? So, you know, for everybody listening, I want to make two points. known unknowns and the unknown unknowns in terms of that fixed estimate? So, you know, for everybody listening, I want to make two points. One is I've been doing this a long time. And so I have domain expertise and a certain amount of experience, you know, in very narrow areas, so embedded software development, build systems. You know, there's a couple areas
Starting point is 00:38:44 like that that I feel confident in. Now, if you gave me, to use a different example, if you asked me to estimate how long it would take to write a desktop program to do a thing, I probably can't do that at all because I just don't, you know, I do that as a toy project for myself or something internal, but not to like a professional degree. So there are things that I, because I lack the knowledge, I can't estimate them. But that doesn't mean that somebody on my team can't or somebody I know can't or, you know, another
Starting point is 00:39:15 individual, you know, could probably create a perfectly reasonable estimate. Now to answer your actual question, what I usually do, you know, I have a good sense of when I'm trying to decompose the problem, like where I feel a given task is kind of doing a lot of heavy lifting here, where a given area of development is well defined or not. And if I notice something that there's a lot of risk in, then usually I just try to rearrange the project to address the risk first or to try to get to a point where you could get some clarity on coming up with a better estimate. So for something like there's a brand new chip with an alpha data sheet, well, okay, first thing we need to get samples, and then I need to do a bring up sprint. Now, I brought up a lot of new chips, including brand new silicon. So personally, for something like that, I do have a good sense of like, if it goes well, it's going to take me a certain amount of
Starting point is 00:40:16 time. If it goes poorly, and we have design problems, we're working out. It's like, you know, it's an indeterminate amount of time. And some of that is just communicated. Now, from a business perspective, I have the luxury of saying, maybe this project's not for me. Or just saying, okay, I'm interested in this overall project, but I think that if we're going to write the subsystem that uses this new chip, the first thing we do is get the chip. We do initial bring up, we set some low bar for what that means, and we see how that effort goes before I would commit to doing the actual subsystem development. That's how I would do it. People, I give that proposal to somebody, they could very well say, nah, we don't like that plan,
Starting point is 00:41:06 and go to somebody else. And I think, you know, great, that's fine. So you do, you can do a fixed bid for like a part of the project and then another fixed bid for the next part. Yes. Which is just what I do. I do a fixed bid for every hour. It's always the same. Okay, well, thank you. I do a fixed bid for every hour. It's always the same.
Starting point is 00:41:27 Okay, well, thank you. That makes a lot of sense, actually. So I want to move back to Christopher's point of estimation as part of design. Identifying dependencies and concurrencies. And what else is estimation good for? I mean, if we aren't great at it and we're learning it and we don't have the feedback yet, why do the schedule? Why do the estimations?
Starting point is 00:41:58 I think maybe that's where we should have started in the first place. I think we were all excited to kind of get into it. But yeah, that's an awesome question. So what is the point of an estimate? So there are several points of an estimate. There's several benefits to an estimate. You need, as we discussed already, you need to be able to give some target date for other parts of the business for somebody else to, to be able to get their part of the puzzle ready,
Starting point is 00:42:25 of the thing that you're estimating. And you may not like it, but things have to ship at some point. And there's a lot of coordination and a lot of dependencies that go into that. So that's one point of it. Alicia, I think everyone, it's sort of a trite phrase that, oh, no one has requirements. Requirements aren't real. The requirements aren't good enough. The act of estimating, and this is what Alicia said earlier with her, you know, successful estimating work, the act of estimating forces you to discover more requirements, forces you to break down what something you might be like, yeah, that'll take me about three months or three days, forces you to break it down to smaller bits of work that instead of three months, you're like forces you to break it down to smaller bits of work
Starting point is 00:43:05 that instead of three months, you're like, actually, there's four subtasks in there. Each of them will probably take more like a couple of weeks. So maybe it's more like eight weeks instead of three months. Or, I mean, usually it'll probably go the other way. When you decompose tasks, you usually end up with more work than less work. But those are just the couple of reasons
Starting point is 00:43:23 why you might bother with an estimate or what an estimate is good for that I can come up with. Did I miss any big ones? Well, since you're arguing the wrong side again, maybe we should go to Philip. I don't think you missed anything. I think that was a good list. I do think, you know, in terms of design, if you find that you can't estimate something because it's too unknown, clearly that indicates something that you need to spend more time on to figure out what it's going to look like. I don't know how to argue the other side, Alicia. I'm sorry for that.
Starting point is 00:43:58 Well, it's like you just throw your hands up and say, oh, it's too hard. We're not going to do it. It's like nobody really wants that option either. Actually, I would argue with air. I think, I think a lot of engineers, if they assume estimates too hard, there's no point to it. Look, you've, you've just proven my point. We can't estimate it very well. So why bother? So that is a common attitude. I'm not arguing for it, but maybe I'm supposed to argue for it. Anyway, that's a common attitude. It's like, throw up your hands, forget it. I'm taking. I'm taking my ball and I'm just going to say it's going to cost an indeterminate amount of time and money and you're going to get it when you get it and it's going to cost what it costs. Like that's never going to work regardless of whether or not you're a team lead or in business, you
Starting point is 00:44:52 know? So it's like, that would probably be an argument that you can make and get away with at one level in your career that maybe you're not going to be able to get away with at another level in your career. There's maybe a career maturity there that certainly like 22-year-old me wanted to throw up my hands in disgust and just walk away. 25-year-old me probably did too. But as I became a team lead and a manager and you kind of see and you have respect for the others who need the deadlines and you have sort of respect of the deadline itself.
Starting point is 00:45:26 And yes, it's a good thing to come up with this estimate and having a reasonable estimate. Then yeah, the, the, the argument of I'm going to throw up my hands just kind of goes away. The, I haven't really heard the, the, I haven't really experienced the throwing up the hands over scheduling so much. Everyone produces an estimate whether they want to or not, because you've got to plan your day somehow, right? Even if it's on a micro level, in the back of your head, you're estimating how long everything you do takes. But where I have heard throw up the hands argument quite a lot is, oh, the requirements are always changing. The requirements are always
Starting point is 00:46:00 changing. So we shouldn't gather requirements. The requirements we have, you know, we should treat those as malleable jello. And that really drives me crazy because that does feed into estimating because if you don't know the requirements, you can't really estimate very well. But it also is like a, it's a cop-out to, well, we don't really know what we're building at any given time. And that seems like the pernicious core of a lot of this is, oh, requirements change, so don't bother. It sounds like you don't like Agile. That's well-known.
Starting point is 00:46:39 But how many of us have had T-shirts that they've had to sign committing to a schedule? I have never heard of such a thing. Is that a thing? Well, that happened at a startup I was at. We all got T-shirts, and we had to sign them. Everybody in the company signed them, and the T-shirts had everybody's signature on them with the schedule date on them, which we missed by a year and a half, by the way.
Starting point is 00:46:57 I wish I had that shirt. There are, as pointed out as you go along in your career, this is one of those skills that you need to become more senior. It's part of being a team lead. It's part of architecting and understanding the system and not just your code. And we talked about the end date being a part of the estimation process and decomposing the work always leads to additional requirement definitions. One of the things we haven't talked about is that it also shows the dependencies. I don't love Gantt charts, but understanding when the hardware will get here
Starting point is 00:47:43 is a really important part of understanding when the firmware can be done. Because the firmware isn't going to be done before the hardware gets here. And so identifying these dependencies and milestones and also what two things can be done at the same time. The concurrency. I can start bringing up my command line interface or other things on prototype boards before the final board gets here. And that's concurrent. That's two things happening at once. So I want to add, in addition to defining the requirements and getting an end date, estimation is part of design because it identifies the dependencies and the concurrencies. Amen. I mean, Gantt charts are super useful for showing exactly that. I feel like Gantt charts
Starting point is 00:48:31 are tied in with waterfall. And if you do waterfall, then you must use Microsoft Project, and therefore you must have a Gantt chart as if a Gantt chart is this evil being that means your project is doomed or something like that. There's definitely, I at least feel like there is a negative connotation around them. However, Alicia, yes, like Gantt charts are the only visualization that I know of that shows exactly what you said. There are some bad uses of estimating estimates and that whole process. Svek, since that's what you're arguing for, what are the wrong ways to use estimates? Not to do estimates, but to use them. One-time efforts that are punitive or punishment-driven in nature. So, like, the worst thing you can do is, well, not the worst,
Starting point is 00:49:21 a bad thing you can do is come up with an estimate at the beginning of a project, especially a longer project. And, you know, the engineering team spends a reasonable amount of time, comes up with a good faith estimate. They, you know, present it to the stakeholders, whoever's going to kind of need to need their dependencies and says, okay, we're going to be done, we think, in September. And here's what we know. Here's what we think we're going to build. Go. Then no one talks about the schedule ever again, other than, are you done yet? Is it September? Are you done? Are you done? And no one takes any changes into scope or, you know, new discoveries are made, good things happen, bad things happen. No one revisits the schedule. And instead it's treated
Starting point is 00:50:02 like 10 commandments, you know, chiseled in stone. And the engineering team, their feet are held to the fire saying, look, you said September, and we don't care that everything has changed. And this new alpha chip that we forced you to use has a million bugs that, you know, we have to wait for another tape out of another silicon rev to get through. I don't care. You all are in trouble because you didn't hit your deadline. So those are some terrible, terrible uses of estimates. Do you have anything to add, Philip?
Starting point is 00:50:30 No. Having lived through it, I'm just kind of shaking here in the corner with a little bit of PTSD. There's also the opposite of what Speck said, where you don't touch them. There's also the demanding an update to estimates every week or every day when you just can't. It's hard. They're different skills. And it's hard to go from I'm coding and getting things done to I'm thinking about the whole system. Yeah, I agree that doing estimates too often is problematic. I mean, it's sort of, you know, having an idea of what you need to use your estimates for, I think, is important. You can never update them, which probably happens more than it should. You can continually ask, when's it going to be done?
Starting point is 00:51:18 When's it going to be done? I need a new estimate. But I do think that both of those kind of hint at something that is important about estimates is there is an unknown right cadence for the fact that you do need to regularly reevaluate your estimates and update them based on what's changed. And, you know, if the estimates are wrong and your schedule is based on estimates, at some point you do need to look and see, you know, okay, here's where we're at. Here's where we thought we were going to be, the problems we had. What has to change as a result of this? I do think that has to happen.
Starting point is 00:51:52 And you could definitely fall on either side of that, of doing that update too much. And now you have somebody whose full-time job is to bug everybody to make sure that every day the Gantt chart is perfectly up to date and printed out on a plotter and hung on the wall so the CEO can see that, you know, I've definitely been a part of that kind of thing. So, Philip, how do you set expectations with your clients? You know, obviously they know they're coming to you. So, you know, do you tell them, look, this is fixed bid.
Starting point is 00:52:20 I'm going to give you about three months worth of visibility. We'll do some endpoints there. And like, how do you set expectations with them? So three months is just my limit. It's often that somebody comes to me and what they need done doesn't necessarily take three months. But I do just start off saying that, you know, we like to work on a fixed bid so that I provide you with a total cost of what it's going to cost. And that's the cost and a schedule that's, and I do say an estimated schedule. So, you know, it's like, I might think something's going to take me 21 business days and I'm going to say, here's my start date. Here's my estimated completion date. But I do make it clear that, you know, I'm going to communicate early and often if I run into something that's going to throw that off. Now, being fixed price, the trick is, you know, I can't
Starting point is 00:53:10 go ask for more money, right? So I have to be reasonably sure about what I'm doing to some degree to take the risk that, you know, I'm going to run into some unknown bug and it's going to reduce my profit on a given project, but not, you know, bankrupt me or taking out loans or taking out other work so I can pay the bills because I'm having to do something for a client that I didn't anticipate. But I do think, you know, where we get in trouble is things go wrong and then we don't communicate that often enough. And so I try to not do that. I try to, you know, at least once a week give a picture of where I'm at, the work I've done, whether or not, you know, we think things are going to take longer or, you know, we've been making good progress or we might even end up ahead of schedule.
Starting point is 00:53:55 So, just a regular communication pattern is my solution to that. Do people get angry when you come in ahead of schedule and they feel like they've overpaid? No, never. Good. I think, and that was part of what inspired it is I had a client early on and they had some exploratory work for me and they had pitched it that way and it was hourly. So it was just kind of, you know, whenever I did some work and whenever they had time to review what I had done. And then one day I get
Starting point is 00:54:26 this email and they're asking like when it's going to be wrapped up because the project's dragging on too long, which is, you know, funny because it was an exploratory project from their side. So I have a call with the CEO and he tells me that he would have rather have had all the work I did done in a week for, you know, 10x the money just to have it done in a week. And I was like, OK, well, if that's how you're looking at it from the CEO's perspective, that, you know, the shorter time to get the feedback is worth the higher cost. That sort of motivated me to start exploring this. Well, maybe I can just dedicate myself to one project and focus on getting it done as fast as possible in a bounded time that somebody can depend on and schedule around. And, you know, maybe there's some upside there for me if I can pull that off. And since I've taken that model and, you know, nobody's complained if I get done sooner and they paid a certain amount of money. People have complained on the hourly end where
Starting point is 00:55:25 they're like, you know, we told them that, you know, we had an estimate of whatever, but then they just now they're paying hourly and they don't like the bill because, again, from their perspective, it's dragging on or whatever other thing that might be thrown at you. None of that's happened since we had fixed price work, which I'm very surprised by and grateful for. Do you have to deal with code bases that you didn't make? Yeah, I think most of them. I mean, I find myself helping clients solve other bugs. And so I can't imagine doing fixed-bit because it can be quite the time sink to teach a new engineer how to do something
Starting point is 00:56:12 or to solve the horrendous memory bug they've created. Sounds like you just don't take those kinds of things, Philip. You focus on one area and that's what it is. I do take those kinds of things but i don't necessarily structure it maybe in the way that's you know like we're gonna fix this bug um and and that this is the cost for fixing that bug you know if i'm helping somebody's team do it it might be like well i'm gonna give you two weeks of my time and here's what that looks like and here's the price for that and you know we just see what we can get done in two weeks of that time and we
Starting point is 00:56:48 reevaluate. Or it might be that I'm going to give you, you know, 10 joint debugging sessions of four hours in length for a certain price. So there might be times that I do something like that, where it is a little more nebulous in terms of like solving a problem or coaching a person or even just refactoring something to make it a little easier to work with. But you're right that it's hard to, you know, the nature of debugging is that if you knew what it would take to solve the bug, you wouldn't have to pay somebody to do it, right? And you wouldn't need an estimate. You would just fix the bug. So, those are sort of indeterminate problems that are impossible to estimate to some degree because it's like once you've figured out the problem, you could then estimate the time to the fix. But the time it takes to figure out the problem itself is indeterminate.
Starting point is 00:57:40 Well, half the time a fix is like a one-line thing. Totally. And you're just like, how did this ever work? And it's trivial to fix, but it's impossible to find. I imagine you have enough experience. You don't create those for yourself very often. But that is an experience thing. And I have created them for myself. So, how do you deal with the fixed bid and the...
Starting point is 00:58:10 He's explained it already. I know, I know, but it's just so mind-boggling. Okay, how about this? And sometimes he's wrong. I don't think he'd say he's right every time. In fact, Chris has helped me when I was wrong. That was how wrong and forlorn I was that I called Chris one day and I was like, I just need somebody to sanity check my thinking. I didn't help at all.
Starting point is 00:58:33 Are you saying that's how bad off you were you had to call Chris? Yeah, that's exactly what he said. He wasn't involved at all. I offered him zero actual help, if I recall correctly. And this particular problem was frustrating because I had written all of the code in the target time frame. And it was also like a save the sinking ship kind of project to begin with. And the real gate was the fact that the company that sold the chip didn't actually understand the chip because they had acquired the chip through an acquisition. And then the team that had designed the chip was either checked out
Starting point is 00:59:09 or the remaining designers were in Europe, but had worked on other projects in the intervening years. And so didn't really have a good memory. So, you know, and that it was like, it was unknown if there was ever even going to be a solution, you know, and it was just luck. It was truly luck that one day I decided to flip one bit and we noticed that there was, you know, we're suddenly receiving radio traffic when we weren't able to before. But, you know, that was, yeah, I don't have a good answer. Sometimes you just suffer, I think. The nature of the work is that, and I think this is true of most, most projects when they get derailed, they're derailed from like one major issue that takes an indeterminate amount of time to solve. And nobody has any line of sight for how it will be solved, but, you know, solving it
Starting point is 00:59:55 is key to the actual project being completed. And, um, I guess the goal is as much as possible to avoid those, but, you know, sometimes they do happen. And, you know, for a fixed price bid, then, yeah, you take your loss, you lose your profit. And, you know, it's hopefully you still aren't you're not like working for free and getting behind on your bills because you're going that hard on it. And, you know, maybe if you get into that situation, like, here's the truth. I went to the client in that situation. I was like, look, we need to figure something out because it's like, this could go on for months. And, you know, we estimated this project on a, I forget, but maybe
Starting point is 01:00:34 a four week timeframe, you know, and it's like, here we are on month four. It's like, you know, I don't want to give up, but I do need some kind of solution here for at least keeping me afloat a little bit. So that happens. And I think, again, it's just part of the, you know, you have to have the hard conversations and sometimes they don't go the way you want and they're very uncomfortable. That's, you know, I don't think that's any different than the hourly work. It's like, what, I'm just going to bill these guys for a bunch of hours and not give them anything to show for it. And they're going to be just as happy as me coming to them and saying, I need more money. It's like, I don't see that either playing out very, very nicely. It's funny. I've done a couple of the
Starting point is 01:01:15 impossible bugs lately. And I don't, I can't say this out loud, I don't usually end up charging for them. Right. Excuse me, what? It only takes a couple of hours. Or I do a code review, and it doesn't take long enough to set up all the legal stuff. And yet I can't have my coffee maker. That's a marital thing. Fixing one impossible bug would have paid for it. It's true and so I have thought well maybe I should be like
Starting point is 01:01:47 offering the service of being the rubber duck and talking through and there should be a price for that but while I know some of the people I've worked with would have offered a decent amount of money
Starting point is 01:02:03 I just I don't know how to charge that's that's charging for experience instead of time i'm gonna flip us around a little bit uh because i've gotten totally off it's fact you you you work with contract people what is it like from the other end what are your expectations i actually um first all, I just want to say that I think your coffee maker issue is esteemable. I think it's esteemable. I think that's the real problem. But I actually want to flip it around.
Starting point is 01:02:34 You can't flip. We've already flipped. Now you flip it around. We're back where we were. It's a three-sided coin. It's a six-sided die. So the three of you are contracts right so you work on short-term or long-term contracts with companies and my whole career has been inside companies right so i've been in iRobot for almost nine years now and so when i make estimates i make
Starting point is 01:02:59 estimates on a bunch of projects i work with a bunch of people but then we keep working together over and over for eight you know eight, eight plus years. Right. So there's a different, a different type of relationship. There's a long-term relationship that can be built up there. And so, you know, I'm, I've probably worked on 20 different projects over the last couple of years with a bunch of different people. And the good thing is that, you know, some of these projects are short little things and some of them are six months or even a year, a year and a half long projects. And the good thing is that there is, everyone has kind of the same idea of what a schedule is, of what an estimate is. It's like, Hey, we want to do this new thing, software team, the EE team, whatever, we're going to go off.
Starting point is 01:03:38 We're going to sit together. We're going to come up with a schedule, give us a couple of weeks. We'll come up with a schedule. We say, okay, we think, you know, we are 75% certain that we will be able to get done by September. And, you know, here's, we think we have a milestone one in April and we have milestone two in like July. And then we think we'll be done in September. And, you know, here, here's the big risks. We think risk one is this chip. We think risk two is this motor. And then risk three is some process or whatever it is. And then we have this conversation with the business, with the product person. And it's all like, there's a lot of, there's a lot of empathy going on here. I understand what they need to hear to get their stuff done by then. And they hopefully understand
Starting point is 01:04:22 what I think the risks are and what I think, you know, and I say, you know what, if I can get a third person working on this, then I can burn down that risk sooner. And they say, well, but then we'd have to take that person off this other project that needs a higher priority than this project. So, you know, we have the conversation than a month or two in because there is a long-term relationship here. It's very easy to be like, all right, we do our monthly project review and okay, these two things went sideways. And so, you know, unexpected things came up. So September is not doable unless we cut X, Y, Z, otherwise it's November. And so you can have that conversation and you sort of are in each other's heads and each other's worlds, and you're all in the same team, literally and figuratively. And that's how a good estimate is used, how a good schedule is
Starting point is 01:05:06 used, and how a good team works together with that. I've never been in a company long enough for that to develop. I've had some good teams that that's worked with. I've had good teams, but they weren't due to, they were serendipitous. It wasn't due to long-term. Empathy? Sure. I had to bring that word out. I'm contextually required to use that word on this podcast. I think cows has to be said by you as well.
Starting point is 01:05:35 Cows? Excellent. Philip, you said you don't schedule past three months, which is where chaos starts becoming too big of a factor. What do you decompose your tasks into? What is the largest task on your item list allowed to be? Are we talking personally or for consulting clients? Because I think I handle those differently. For consulting clients, I mean, not that you necessarily tell the client, but do you have a week for I2C driver or do you break it down to I2C driver, how hookup into multiple smaller day-long projects?
Starting point is 01:06:23 I think it depends on my comfort with the project. I would say for things like I2C driver, I would probably make that, you know, just its own thing and know all the associated tasks that go on with that. And usually things like that, I'm probably going to estimate in hours because, you know, that just is the currency of the business to some degree. But there might be, you know, for things that I'm not as confident in or just, you know,
Starting point is 01:06:54 I haven't done them as many times, I will break them down into the finer grain steps of whatever I see it as is like, I'm going to talk to this thing with my Aardvark adapter, and then I'm going to get a driver written using the vendor's driver. And then I'm going to get that imported into the system. You know, I might have a fine list of the steps I'm going to go through. And usually that's just for me to have a plan to follow and, you know, I guess as a checklist in some sense and just to make sure that I really understand what I'm going to be doing. Because I think if I left everything big and vague and high level, then again, it becomes easy to miss some fundamental task that was really going to take up 80% of the time and that I just didn't even write down. So to restate that, for things that I'm very comfortable in, I tend to leave those at a very high level. And the areas where I personally perceive more risk or more uncertainty, those I
Starting point is 01:07:57 tend to decompose into smaller tasks. But I don't necessarily do that based on time. It's like I'm pretty sure I keep everything in hours that I write down. I've been told that if you, if you think it's going to take longer than two days, you need to break it down because you don't know what is inside that box. Do you have any rules of thumb like that? You can say no. Yeah.
Starting point is 01:08:23 Well, I'm just thinking, I don't think that I have any rules along that line. Usually it's in the opposite direction. Like, ah, if you think it's going to take two days, it's probably going to take four. But I don't think I'm the, the breaking it down for me. It's all about what I see as the risk rather than like, you know, I'm making estimates for myself and for my clients. So I'm not trying to, to, you know, make up a number to get out of something. So I'm not particularly looking for, like, you know, if you're rating something and you pick a seven, it's like, nope,
Starting point is 01:08:53 seven's not allowed for, for my own estimates. I don't have that rule. Yeah. Working, working with, you know, having, having projects where, you know, we have five, six software engineers a couple electrical engineers and a bigger team working on it if people if only one person understands a particular area and they come back and they say with that i'll take about two weeks i sometimes might kind of dig in and if they've done something very similar before and they say two weeks, then I might just let it go. If it's kind of new and sometimes you can kind of tell that two weeks is sort of a swag answer and it's kind of like, all right, let's figure out, let's break it down some, not because it's like, oh, I don't trust your estimate, but because maybe we all haven't actually thought through
Starting point is 01:09:41 exactly what goes into doing that thing. if your off-the-cuff response is two weeks and we all know we haven't really done something like that before so there's i think i think it's kind of like what you said it's the risk element but when you start dealing with other people then suddenly you have to remember you know who's if someone's done motor drivers since they were seven years old and you know they can write them in their sleep then yeah yeah when when someone tells me two weeks she she'll nail it because she's done this a million times. But if it's newer, then there's more risk involved. Well, I think that goes back to just when I was working within companies and not on my own,
Starting point is 01:10:17 a lot of the scheduling conversations were like, okay, you just heard about a problem for the first time and you have an estimate for how long it's going to take from a two-sentence summary without looking at code or really even reading the issue report to see what was involved. It's almost like if an estimate is too off the cuff, it's suspect. And maybe two weeks is something that some people will say, but I just think that there's like, I don't know, maybe there's a glint in somebody's eyes that shows that they didn't really think about the problem and they're just giving you an answer. Yeah. I mean, I've definitely been
Starting point is 01:10:52 in a situation when our executive VP of engineering, some, some topic comes up and I'm in the executive team meeting and they're like, all right, oh my goodness, we have to fix something or we have to do something. How long is that going to take? And the first thing I say is, I don't know. And the team, the team will go back and in a week we will have a more intelligent schedule for you. And then if pressed, if then you can start saying, look, order of magnitude, this is a six month project, or this is a three month project. You know, that could mean two months. That could mean six months. And you know, you're, you know, that could mean two months. That could mean six months. And you know, you're, you're, you're again, being very over communicative here
Starting point is 01:11:30 saying, look, if you're pressing me for a number today, I'm going to give you a number and I'm not sandbagging. I'm not, you know, I'm not, I'm not, you know, going to tell you it's going to be 10 years for something that I actually think will cost, will take six months. But I think this is six months plus or minus, but that plus or minus is another six months because I don't know enough now. And then you come back and a week later, you have a more detailed estimate because you've actually been able to spend the hard time
Starting point is 01:11:53 thinking about it and getting whatever details you want. Philip, when you and Spec were discussing this in Slack, you had an analogy that really kind of hit me. When people talk about software is not estimatable, you brought up travel time. Could you describe that again? Yeah. So, I think it's a great analogy just because it's something that we all do so freely. And we don't even think twice about the fact that we estimate travel time. It's nothing to, you know, you're going to meet up with a friend somewhere and, you know, you're leaving.
Starting point is 01:12:35 I'll be there in 20 minutes. You know, that's nothing. But along the way, there's any number of things that can happen to you that throw that estimate off. You could get into a car accident. You could get stuck behind a truck that jackknifed on the highway. A snowstorm could come out of nowhere and get you stuck on the interstate for three days. There's all these freak events that can happen that can throw your estimation off. But we don't then react to that and say,
Starting point is 01:13:04 it's impossible to estimate travel time. It's like, yeah, sometimes we're right. We even tend to have the same kind of biases where it's, you know, if you're estimating how long it takes you to go somewhere that you go frequently or somewhere that's close to home, you're going to tend to underestimate the time it takes you to get there. And if you don't know how long it takes to get to somewhere, it's not like you throw your hands up and say, I have no idea how it's going to, how long it's going to take me to get to this new place. You're going to ask somebody who knows. You're going to look at a map and calculate it manually.
Starting point is 01:13:34 You're going to go to Google Maps or Apple Maps or any other mapping service and see what their estimate is. They might even give you environmental factors that you're not aware of, like what the current traffic conditions are, what they, you know, what the conditions are if you leave at different times. And so we have all these ways when we travel that we can, you know, we seem to be able to deal with the ambiguity and the risk of having our estimates be wrong, but we don't let that cloud our, you know, our willingness to make them and to use those to plan our days and figure out when we need to leave. And maybe somebody is habitually late and you know that you have to account for that, right? We even adjust for other people's tendencies with travel time. This person always shows up 20 minutes late, so you tell them that you're meeting 20 minutes earlier than you are,
Starting point is 01:14:21 whatever it might be. But I think when we have these same kinds of scenarios in software, we just don't treat it in the same way we do with travel time. So, you know, if you don't know how to, if you've never done something before, it's not that that thing is not able to be estimated. It's not able to be estimated by you. There are other people who are, who've done it, who have a lot of experience with it that can be consulted, you know, within a company, it's sort of, it's nice because you have a team and the odds are good that the skills on the team are distributed pretty, I don't want to say evenly. Distributed unevenly? Fair enough. Distributed unevenly. Like we're all good at different things and we have different experiences. And, you know, we can consult other people when making our estimates to get feedback on what we're missing, what we're not thinking of, how other people have done it in
Starting point is 01:15:13 the past. And so I think for that reason, I really like to think about travel and software estimation as being quite similar to each other. I'm glad you brought up the people who habitually get it wrong and how other people make allowances for them. And, you know, there are people who, if you're not five minutes early, you're late. There are all kinds, and there are all the little things. You mentioned the catastrophic problems, but there's just hitting all the red lights. Hitting all the red lights. Which only makes you a little bit late, but if you are going for a job offer or job interview that's important i i love that analogy because i think you take it one step further and you're making that estimate i mean maybe you make that estimate because you just like to know how long it takes to get to
Starting point is 01:16:00 the grocery store and you're trying to beat your personal best or something like that but you know if it's hey philip you let's, let's meet at the restaurant, Philip, I'll meet you there at two o'clock. Like you are, you know, you are, you are the product, the product owner or the business, you know, you are the other part of the, of the estimate there. And it's important that I estimate my own travel time so that we get there at about the same time. So you're not sitting there for 20 minutes while I'm stuck in traffic because I left the house too late. So I think that analogy goes even further. I like it. I want to pose a couple of things to both of you and see how you react to them. One of them goes back to software engineers are terrible at estimating, therefore we should never
Starting point is 01:16:36 estimate. I think even if software engineers are terrible, we should still do estimates and try to schedule things because most of the time an inaccurate estimate is better than no estimate at all. Respond, Chris Feck. I agree. I think that an estimate is better than no estimate. You are absolutely right. And the only way you get better is by estimating and learning from it. So I totally agree. Now, I'm going to push back on this a little.
Starting point is 01:17:08 Are there, should we estimate everything? Like, are there tasks or sets of work that we think shouldn't be estimated or, you know? Bathroom breaks? Yeah, I think where you're headed was like, is this a research project with, with, with no visibility? Is that worth estimating? done in a sprint is even worth that amount of effort. You know, so I have a hard time because I am very pro-estimates, but I'm also very anti-estimates in some ways where like, I do think that the, you know, it's an expense to make an estimate and good business is not just increasing expenses blindly. You know, we want to make sure that our expenses are at the appropriate level to help us
Starting point is 01:18:08 get our product out the door and make the money we need to make, but then no higher. And so just based on that framework, I think that there's probably times when estimation's not worth it, or even to different degrees of certainty are worth it or not worth it right like maybe sometimes an off-the-cuff estimate is the right the right
Starting point is 01:18:32 answer for that situation and it's not really a problem that he says about two weeks maybe it comes down to the business value or what is the value of the thing that you are estimating if it's like look spend a couple weeks like investigating something, like something kind of prototype, something researchy, and the company's not gonna make a ton of money nor lose a ton of money if you do that thing. So spend a couple of weeks, maybe you time box it. You're not saying do X amount of work.
Starting point is 01:18:59 You're saying spend two weeks, come back to me, tell me what you found. Then there's the, if the product does not launch in September, we are in big trouble or, you know, we, we are betting the company on this new product. So we must, must estimate and schedule out its launch date. So we, you know, so we can plan everything around that. And if this launch doesn't go well, we're out of money. So there you want a very accurate and very well-managed schedule. And there's plenty of things in between where, you know, okay, we can have a 75% confidence schedule versus a 50% confidence schedule versus a 25% confidence schedule, depending
Starting point is 01:19:36 on the, you know, the upside and the downside of what if the schedule is right or wrong. Second thing, there aren't really any exciting tools or things that people should be looking for, new methods or processes. They should just sit down with a piece of paper and a pen and think. I use a spreadsheet, but yeah, I was going for Excel. Yeah. Are there new methods and processes that are good? Or am I right in thinking that most of the time planning is just thinking? I personally don't think there are new processes. But, you know, I mean, there are plenty that you could try. But what's worked for me is just doing the thinking and making the guesses
Starting point is 01:20:19 and actually writing down my assumptions and then comparing reality in the future to what happened in the past. And I think, you know, you could probably put a method around that, but those are the fundamental pieces. Yeah. The hard part is making time to think about it and then writing it down and publishing it. Like if you're working for yourself, piece of paper is great. Working with others, you know, whatever wiki word doc google doc whatever it is that shares that you can get it out there but making time to do it and then to communicate it that's it i'm not aware of any microsoft project is perfectly fine silly text file is
Starting point is 01:20:59 perfectly fine excel is great whatever i sometimes uh also, if I'm handwriting it, with Post-it notes. If it's a big interdisciplinary team and you really can move around, like if there are three projects going on and you have mechanical over here and mechanical over there and you need them all to come out on this date, Post-it notes are helpful for moving resources around. Not that people like to be called resources or cogs or minions. There's so many things people don't want to be called. Assets.
Starting point is 01:21:36 Overhead. People love being called overhead. Head count. I think head count. Alicia, when there are bigger projects, but the bigger the head count, at least when there are bigger projects, but the bigger the project gets and you're going to have more concurrency is going to matter and this has to be done before this and this group has to do this, but they can only do one thing at a time because there's only one RF lab
Starting point is 01:21:56 and we can't run the 3D printers in parallel, whatever. Then the tools, yeah, sticky notes or Microsoft Project or some sort of gantt chart but yeah there's i don't i don't think it's a secret sauce or whatever there's smart sheet there's all these online tools but they're essentially the same thing they just let you visualize stuff in time with durations and hopefully stack them up so you can see it all in parallel so there's nothing magic there the hard part is doing the work and then pick a tool and stick with it but both of your answers feed into my feelings about software processes, but I'm not going to go there right now.
Starting point is 01:22:29 You've got to go there now, man. Yeah, you can't dangle that carrot in front of us. No, because we're at the length of Real Genius where the popcorn's starting to come out of the building. We should have estimated the length of this podcast before we started. I could have estimated this was going to be a long one. Yeah, I would have estimated much longer than 50 minutes. Svek, do you have any thoughts you'd like to leave us with?
Starting point is 01:22:56 I feel like people need to understand that I do think estimates are good. I think that people can get better at estimating. I think that people should do estimates and people should understand in their company or their companies why estimates are needed. And you need to have a healthy relationship with all of the users and producers of the estimates in order to make them worthwhile. And you've got an estimate needs to be a living document and you need to have frequent conversations with it or about it. I feel like this whole, if you have trust and empathy for your,
Starting point is 01:23:26 for everyone around you is a lot like the articles. If you have perfect code, it's a big ask. I was. So when, when you said that earlier, I thought of asking all of us, when have we ever encountered that?
Starting point is 01:23:39 And it's like, you're allowed to eliminate iRobot from consideration, but I didn't ask it. But I have had that happen not. There's always management who wants more and doesn't trust engineering. I just haven't been in a company where that's... As a full-time employee.
Starting point is 01:23:58 As a contractor, I've had lots of good experiences, but that's because I'm kind of off to the side. I've had better experiences and I've had worse experiences. And at every company I've worked at four or five companies and, you know, different, different groups, different human beings. I'll say I've had better and worse experiences with them all. But if you are starting from a place of trust and a place of mutual respect, you can, you can go far, right? I'm not trying to make that sound trite, but it's very true with, you know, with less trust and with less mutual respect and more adversarial, then no techniques are really going to be able to help you overcome that very much, which is not a reason to not do estimates.
Starting point is 01:24:35 It's not a reason to not be informing your peers and your colleagues what's going on. But anything you can do to build a better relationship will absolutely pay dividends in all of this stuff going forward. And if you're in a place that has a toxic relationship and you're, you know, you know that you're going to get beaten over the head with the schedule and it's a weapon, it's not a tool, then I don't know what else you can do other than quit. You can still make the estimates because they will still make you better at architecture. They will still make you better at identifying dependencies. And even if nobody listens to them, learning how to do the estimates is a good skill for when you get into someplace that they will listen and you'll be good at it. That is a great, much more positive career focus,
Starting point is 01:25:22 like career development focused piece of advice. That's much better. What she said. Philip, do you have any thoughts you'd like to leave us with? Well, Alicia, that was very well said, which makes it a tough act to follow. For anyone in the audience who's interested in becoming a better estimator, we have a number of articles on our website on the topic of planning and estimation, including a 2021 series we wrote called Improving Our Estimation Abilities, and we'll get links to those articles at it in the show notes. While you're there, if you appreciate that content or any of the other content we
Starting point is 01:25:55 produce, please take a look at our course library and consider becoming a member. Direct support from our readers is what allows us to set consulting aside and focus our time on producing educational content for the community. Our guests have been Chris Speck, Embedded Software Engineering Manager at iRobot. At iRobot. At iRobot. I believe that they prefer iRobot. And Philip Johnston of Embedded Artistry. If you'd like to see discussions like this in real time,
Starting point is 01:26:30 join the Embedded Patreon and get an invitation to the Slack group. Thanks, gentlemen. Thank you very much. This was a good time. Great time. Thank you. Thank you to Christopher for producing and co-hosting. Thank you.
Starting point is 01:26:44 That's Christopher White, by the way. Right just in case there's anybody confused out there. And also, Christopher White is my usual co-host and the man I'm married to. Chris Speck is a good friend, but he lives on a different coast entirely. Okay, thank you to everyone who participates in the Patreon listener Slack group. And thank you to everyone who participates in the Patreon listener Slack group. And thank you for listening. You can always contact us at show at embedded.fm or at the contact link on Embedded FM. If you like the show, please share it or consider writing a review. And now a quote to leave you with.
Starting point is 01:27:20 From Annie Dillard. A schedule defends from chaos and whim. It is a net for catching days. It is a scaffolding on which a worker can stand and labor with both hands at sections of time.

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