[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:16.97,0:00:18.33,Default,,0000,0000,0000,,ADAM SANDERSON: All right folks. Dialogue: 0,0:00:18.33,0:00:20.56,Default,,0000,0000,0000,,This is Unreasonable Estimates and Dialogue: 0,0:00:20.56,0:00:24.38,Default,,0000,0000,0000,,Improbable Goals. My name's Adam Sanderson. Dialogue: 0,0:00:24.38,0:00:26.96,Default,,0000,0000,0000,,I'm a full stack developer at LiquidPlanner. Dialogue: 0,0:00:26.96,0:00:28.94,Default,,0000,0000,0000,,I've been there for about six, nearly Dialogue: 0,0:00:28.94,0:00:32.20,Default,,0000,0000,0000,,seven years, working on Rails, databases, Dialogue: 0,0:00:32.20,0:00:35.36,Default,,0000,0000,0000,,like, front end, back end. You name it. Dialogue: 0,0:00:35.36,0:00:36.86,Default,,0000,0000,0000,,If you want to, you can find me on Dialogue: 0,0:00:36.86,0:00:39.73,Default,,0000,0000,0000,,GitHub. Twitter. These slides are gonna be\Non Speaker Dialogue: 0,0:00:39.73,0:00:42.04,Default,,0000,0000,0000,,Deck. It's all under Adam Sanderson. That\Nmakes it Dialogue: 0,0:00:42.04,0:00:47.02,Default,,0000,0000,0000,,easy. But more awkward, I write code, or I Dialogue: 0,0:00:47.02,0:00:50.01,Default,,0000,0000,0000,,write about code on monkeyandcrow dot com.\NIf you Dialogue: 0,0:00:50.01,0:00:52.40,Default,,0000,0000,0000,,like the talks about, like, reading and learning\Nabout Dialogue: 0,0:00:52.40,0:00:55.80,Default,,0000,0000,0000,,Rails, I'm actually writing a series called\Nreading Rails. Dialogue: 0,0:00:55.80,0:00:59.08,Default,,0000,0000,0000,,So go check that out if that's what you're Dialogue: 0,0:00:59.08,0:01:01.38,Default,,0000,0000,0000,,in to. And hey, it's RailsConf. You probably\Nare. Dialogue: 0,0:01:01.38,0:01:03.92,Default,,0000,0000,0000,,So, like I said, I work for LiquidPlanner.\NWe Dialogue: 0,0:01:03.92,0:01:07.57,Default,,0000,0000,0000,,make online project management software. Probably\Nthe most interesting Dialogue: 0,0:01:07.57,0:01:10.32,Default,,0000,0000,0000,,thing for you guys is that we do probabilistic Dialogue: 0,0:01:10.32,0:01:13.69,Default,,0000,0000,0000,,scheduling, which is pretty awesome. So if\Nthat sounds Dialogue: 0,0:01:13.69,0:01:17.87,Default,,0000,0000,0000,,kind of cool, like everyone else here, we're\Nhiring. Dialogue: 0,0:01:17.87,0:01:19.58,Default,,0000,0000,0000,,And I need somebody to come help me build Dialogue: 0,0:01:19.58,0:01:23.49,Default,,0000,0000,0000,,new stuff. So really, if you're in Seattle,\Nlet Dialogue: 0,0:01:23.49,0:01:24.51,Default,,0000,0000,0000,,me know. Dialogue: 0,0:01:24.51,0:01:27.41,Default,,0000,0000,0000,,So, you can't really work on project management\Nsoftware Dialogue: 0,0:01:27.41,0:01:32.17,Default,,0000,0000,0000,,without thinking about the work of work. Specifically,\NI'm Dialogue: 0,0:01:32.17,0:01:36.21,Default,,0000,0000,0000,,talking about estimating projects, finding\Nthe hidden costs involved Dialogue: 0,0:01:36.21,0:01:39.98,Default,,0000,0000,0000,,in those, and then dealing with deadlines.\NSounds like Dialogue: 0,0:01:39.98,0:01:42.79,Default,,0000,0000,0000,,fun, right? Sounds like life. Dialogue: 0,0:01:42.79,0:01:46.36,Default,,0000,0000,0000,,All right. How hard would it be? I get Dialogue: 0,0:01:46.36,0:01:50.31,Default,,0000,0000,0000,,asked this question all the time. People come\Nup Dialogue: 0,0:01:50.31,0:01:52.84,Default,,0000,0000,0000,,to me, and they say, hey Adam, how hard Dialogue: 0,0:01:52.84,0:01:54.71,Default,,0000,0000,0000,,would it be? How hard would it be to Dialogue: 0,0:01:54.71,0:01:57.02,Default,,0000,0000,0000,,change all of our buttons from red to blue? Dialogue: 0,0:01:57.02,0:01:59.08,Default,,0000,0000,0000,,How hard would it be to implement a new, Dialogue: 0,0:01:59.08,0:02:01.69,Default,,0000,0000,0000,,like, class of user? How hard would it be Dialogue: 0,0:02:01.69,0:02:08.40,Default,,0000,0000,0000,,to implement email integration? What should\NI do? Dialogue: 0,0:02:08.40,0:02:10.89,Default,,0000,0000,0000,,Clarify. Before I tell somebody how hard it\Nwould Dialogue: 0,0:02:10.89,0:02:13.23,Default,,0000,0000,0000,,be - and, pro tip, they don't care how Dialogue: 0,0:02:13.23,0:02:15.37,Default,,0000,0000,0000,,hard you gotta hit the keyboard. What they're\Nactually Dialogue: 0,0:02:15.37,0:02:17.43,Default,,0000,0000,0000,,asking is, how long is it gonna take you Dialogue: 0,0:02:17.43,0:02:22.73,Default,,0000,0000,0000,,to get this done? Before you tell them, clarify. Dialogue: 0,0:02:22.73,0:02:25.40,Default,,0000,0000,0000,,Make sure you know what they want. Make sure Dialogue: 0,0:02:25.40,0:02:27.45,Default,,0000,0000,0000,,that what's in your head is what's in their Dialogue: 0,0:02:27.45,0:02:29.31,Default,,0000,0000,0000,,head. Because a lot of times when people come Dialogue: 0,0:02:29.31,0:02:33.84,Default,,0000,0000,0000,,to us, developers have a very specific vocabulary.\NThings Dialogue: 0,0:02:33.84,0:02:36.12,Default,,0000,0000,0000,,that we think mean one thing mean a different Dialogue: 0,0:02:36.12,0:02:39.45,Default,,0000,0000,0000,,thing to somebody in sales, or marketing,\Nor QA Dialogue: 0,0:02:39.45,0:02:40.95,Default,,0000,0000,0000,,or support. Dialogue: 0,0:02:40.95,0:02:43.76,Default,,0000,0000,0000,,So make sure that you know what they mean Dialogue: 0,0:02:43.76,0:02:45.32,Default,,0000,0000,0000,,when they say, hey, how hard would it be Dialogue: 0,0:02:45.32,0:02:49.34,Default,,0000,0000,0000,,to integrate email integration? Does that\Nmean sending emails Dialogue: 0,0:02:49.34,0:02:52.17,Default,,0000,0000,0000,,out of our system? Does it mean receiving\Nemails Dialogue: 0,0:02:52.17,0:02:55.29,Default,,0000,0000,0000,,from someone else? Does that mean a plugin\Nfor Dialogue: 0,0:02:55.29,0:03:00.00,Default,,0000,0000,0000,,like Outlook or Gmail? If you don't clarify\Nup Dialogue: 0,0:03:00.00,0:03:03.06,Default,,0000,0000,0000,,front, you could spend a lot of time wandering Dialogue: 0,0:03:03.06,0:03:04.82,Default,,0000,0000,0000,,off into the woods, and when you come back Dialogue: 0,0:03:04.82,0:03:07.63,Default,,0000,0000,0000,,with your amazing feature, they're gonna look\Nat it Dialogue: 0,0:03:07.63,0:03:11.00,Default,,0000,0000,0000,,and be like, what? What is this? And you'll Dialogue: 0,0:03:11.00,0:03:14.43,Default,,0000,0000,0000,,have just wasted, like, an hour. A day. A Dialogue: 0,0:03:14.43,0:03:19.29,Default,,0000,0000,0000,,week. Oh, that's gonna suck. So clarify. Dialogue: 0,0:03:19.29,0:03:25.11,Default,,0000,0000,0000,,Next, clarify. Ah. Again. So. Look, you know\Nwhat Dialogue: 0,0:03:25.11,0:03:27.14,Default,,0000,0000,0000,,you're doing, now you gotta figure out why\Nyou're Dialogue: 0,0:03:27.14,0:03:31.53,Default,,0000,0000,0000,,doing it. Ask them. Hey, why do you need Dialogue: 0,0:03:31.53,0:03:36.20,Default,,0000,0000,0000,,to me to integrate email integration? Maybe\Nthey turn Dialogue: 0,0:03:36.20,0:03:38.18,Default,,0000,0000,0000,,around and they say, well, look, we've been\Ngetting Dialogue: 0,0:03:38.18,0:03:41.00,Default,,0000,0000,0000,,a lot of customers sending us screenshots\Nand it'd Dialogue: 0,0:03:41.00,0:03:42.66,Default,,0000,0000,0000,,be nice to just be able to email those Dialogue: 0,0:03:42.66,0:03:47.10,Default,,0000,0000,0000,,into the system. Does a better, does a solution Dialogue: 0,0:03:47.10,0:03:51.25,Default,,0000,0000,0000,,already exist? If it does, you might be able Dialogue: 0,0:03:51.25,0:03:53.51,Default,,0000,0000,0000,,to point them towards that. And a bonus for Dialogue: 0,0:03:53.51,0:03:56.56,Default,,0000,0000,0000,,you, now you don't have to do anything. Dialogue: 0,0:03:56.56,0:03:57.85,Default,,0000,0000,0000,,Maybe they turn around and they say, yeah,\NI Dialogue: 0,0:03:57.85,0:04:00.49,Default,,0000,0000,0000,,know that that exists. But it's kind of a Dialogue: 0,0:04:00.49,0:04:04.25,Default,,0000,0000,0000,,pain to use. Well, now maybe you've found\Nthat Dialogue: 0,0:04:04.25,0:04:06.91,Default,,0000,0000,0000,,there's a better approach to solving their\Nproblem. Maybe Dialogue: 0,0:04:06.91,0:04:09.66,Default,,0000,0000,0000,,you just need to fix existing functionality.\NPeople come Dialogue: 0,0:04:09.66,0:04:13.57,Default,,0000,0000,0000,,to us, all the time, with prescriptions for\Nsolutions Dialogue: 0,0:04:13.57,0:04:16.72,Default,,0000,0000,0000,,to problems. It's really useful for us to\Ntake Dialogue: 0,0:04:16.72,0:04:19.15,Default,,0000,0000,0000,,a step back, and before we say, yeah, I'm Dialogue: 0,0:04:19.15,0:04:21.72,Default,,0000,0000,0000,,gonna do that, to say, wait, why do you Dialogue: 0,0:04:21.72,0:04:23.56,Default,,0000,0000,0000,,need me to do that? Maybe you can help Dialogue: 0,0:04:23.56,0:04:27.44,Default,,0000,0000,0000,,them come to a better solution. And, by doing Dialogue: 0,0:04:27.44,0:04:28.88,Default,,0000,0000,0000,,this, you're gonna get a better idea of what Dialogue: 0,0:04:28.88,0:04:30.23,Default,,0000,0000,0000,,you need to do. Dialogue: 0,0:04:30.23,0:04:33.68,Default,,0000,0000,0000,,All right. Once you know the what and you Dialogue: 0,0:04:33.68,0:04:36.47,Default,,0000,0000,0000,,know the why, it's time to start thinking\Nabout Dialogue: 0,0:04:36.47,0:04:39.02,Default,,0000,0000,0000,,estimating how hard it's gonna be. How long\Nit's Dialogue: 0,0:04:39.02,0:04:41.37,Default,,0000,0000,0000,,gonna take you. I want you to think about Dialogue: 0,0:04:41.37,0:04:43.33,Default,,0000,0000,0000,,the major pieces of work that you're gonna\Nneed Dialogue: 0,0:04:43.33,0:04:47.87,Default,,0000,0000,0000,,to do. Imagine the project and, instead of\Nthinking Dialogue: 0,0:04:47.87,0:04:49.74,Default,,0000,0000,0000,,about it in their terms, in terms of the Dialogue: 0,0:04:49.74,0:04:52.12,Default,,0000,0000,0000,,domain of the person asking you, think about\Nit Dialogue: 0,0:04:52.12,0:04:54.87,Default,,0000,0000,0000,,in terms of what you have to do. Dialogue: 0,0:04:54.87,0:04:56.96,Default,,0000,0000,0000,,Is it gonna require a lot of database work? Dialogue: 0,0:04:56.96,0:04:59.31,Default,,0000,0000,0000,,Well, think about the tables. Is it gonna\Nrequire Dialogue: 0,0:04:59.31,0:05:00.96,Default,,0000,0000,0000,,a lot of work in Rails? Think about your Dialogue: 0,0:05:00.96,0:05:04.22,Default,,0000,0000,0000,,models, your views, your controllers. Is it\Ngonna require Dialogue: 0,0:05:04.22,0:05:06.12,Default,,0000,0000,0000,,a lot of front end work? Well, think about Dialogue: 0,0:05:06.12,0:05:09.87,Default,,0000,0000,0000,,the different components on the screen. Break\Nthese large Dialogue: 0,0:05:09.87,0:05:13.84,Default,,0000,0000,0000,,tasks down into smaller things, and write\Nit down. Dialogue: 0,0:05:13.84,0:05:15.46,Default,,0000,0000,0000,,You're gonna need to refer back to this later Dialogue: 0,0:05:15.46,0:05:17.87,Default,,0000,0000,0000,,anyways. This is the stuff that you need to Dialogue: 0,0:05:17.87,0:05:21.31,Default,,0000,0000,0000,,do in order to, like, service their request. Dialogue: 0,0:05:21.31,0:05:24.59,Default,,0000,0000,0000,,Next, sometimes it could be overwhelming to\Nget some Dialogue: 0,0:05:24.59,0:05:27.59,Default,,0000,0000,0000,,of these asks from people. You'll find that\Nthey Dialogue: 0,0:05:27.59,0:05:30.86,Default,,0000,0000,0000,,have so many, like, business rules that they\Nwant, Dialogue: 0,0:05:30.86,0:05:33.53,Default,,0000,0000,0000,,they've got so many little details that they\Nwant Dialogue: 0,0:05:33.53,0:05:36.19,Default,,0000,0000,0000,,to impart upon you. It can make it really Dialogue: 0,0:05:36.19,0:05:37.84,Default,,0000,0000,0000,,hard for you to see the forest for the Dialogue: 0,0:05:37.84,0:05:41.37,Default,,0000,0000,0000,,trees. Step back for a moment. Try and find Dialogue: 0,0:05:41.37,0:05:45.33,Default,,0000,0000,0000,,unifying principles in what they're asking\Nfor. Is there Dialogue: 0,0:05:45.33,0:05:47.48,Default,,0000,0000,0000,,some model that you can make, in your head, Dialogue: 0,0:05:47.48,0:05:50.36,Default,,0000,0000,0000,,that explains what they're looking for? It\Ndoesn't have Dialogue: 0,0:05:50.36,0:05:52.19,Default,,0000,0000,0000,,to be perfect. It's just gotta be enough so Dialogue: 0,0:05:52.19,0:05:54.93,Default,,0000,0000,0000,,that you understand what direction to be going\Nin. Dialogue: 0,0:05:54.93,0:05:58.37,Default,,0000,0000,0000,,Again, write this stuff down. You'll need\Nit later. Dialogue: 0,0:05:58.37,0:06:02.16,Default,,0000,0000,0000,,All right. You've broken stuff down. You've\Ngrouped stuff Dialogue: 0,0:06:02.16,0:06:04.33,Default,,0000,0000,0000,,back up. It's now in a stage where you Dialogue: 0,0:06:04.33,0:06:07.48,Default,,0000,0000,0000,,can sort of wrap your head around it. Think Dialogue: 0,0:06:07.48,0:06:09.95,Default,,0000,0000,0000,,about other things that you've done. Have\Nyou done Dialogue: 0,0:06:09.95,0:06:12.76,Default,,0000,0000,0000,,anything like this before? One of the unique\Nthings Dialogue: 0,0:06:12.76,0:06:15.41,Default,,0000,0000,0000,,about our profession is that we tend not to Dialogue: 0,0:06:15.41,0:06:18.64,Default,,0000,0000,0000,,do the same thing twice, and if we do, Dialogue: 0,0:06:18.64,0:06:22.58,Default,,0000,0000,0000,,we're kind of doing it wrong. So, if you Dialogue: 0,0:06:22.58,0:06:26.40,Default,,0000,0000,0000,,can, think about similar things. But maybe\Nyou haven't. Dialogue: 0,0:06:26.40,0:06:28.12,Default,,0000,0000,0000,,Turn and ask one of the other developers in Dialogue: 0,0:06:28.12,0:06:31.78,Default,,0000,0000,0000,,your company. Maybe they've worked on this\Ncode before. Dialogue: 0,0:06:31.78,0:06:34.96,Default,,0000,0000,0000,,Maybe they've dealt with this type of issue\Nbefore. Dialogue: 0,0:06:34.96,0:06:38.46,Default,,0000,0000,0000,,They can help you get a better estimate. Dialogue: 0,0:06:38.46,0:06:39.75,Default,,0000,0000,0000,,And on top of that, if they're doing their Dialogue: 0,0:06:39.75,0:06:42.77,Default,,0000,0000,0000,,job right, maybe they'll ask you what it is Dialogue: 0,0:06:42.77,0:06:44.70,Default,,0000,0000,0000,,that you're trying to do, and they'll ask\Nyou Dialogue: 0,0:06:44.70,0:06:47.80,Default,,0000,0000,0000,,why. This is awesome, because it turns you\Naround Dialogue: 0,0:06:47.80,0:06:49.95,Default,,0000,0000,0000,,and makes you be the person who is asking Dialogue: 0,0:06:49.95,0:06:53.42,Default,,0000,0000,0000,,you for work. It's really helpful for clarifying\Nwhat Dialogue: 0,0:06:53.42,0:06:55.21,Default,,0000,0000,0000,,you've got to do. Dialogue: 0,0:06:55.21,0:07:01.28,Default,,0000,0000,0000,,Now, there are dozens of different methodologies.\NDifferent approaches. Dialogue: 0,0:07:01.28,0:07:05.82,Default,,0000,0000,0000,,Different sciences of estimation. Here's what\NI want you Dialogue: 0,0:07:05.82,0:07:11.15,Default,,0000,0000,0000,,to do. Make a guess. That's it. I know. Dialogue: 0,0:07:11.15,0:07:12.79,Default,,0000,0000,0000,,You could play planning poker. You could do\Nall Dialogue: 0,0:07:12.79,0:07:15.63,Default,,0000,0000,0000,,number of things. But, just make a guess.\NHere. Dialogue: 0,0:07:15.63,0:07:19.49,Default,,0000,0000,0000,,I'm gonna make it flash. There. Isn't that\Nawesome? Dialogue: 0,0:07:19.49,0:07:22.43,Default,,0000,0000,0000,,Seriously. Look, an estimate's just an informed\Nguess. A Dialogue: 0,0:07:22.43,0:07:24.96,Default,,0000,0000,0000,,lot of times, we put way too much value Dialogue: 0,0:07:24.96,0:07:27.18,Default,,0000,0000,0000,,on an estimate. It's OK for you to be Dialogue: 0,0:07:27.18,0:07:29.22,Default,,0000,0000,0000,,wrong and it's OK for you to be uncertain. Dialogue: 0,0:07:29.22,0:07:33.89,Default,,0000,0000,0000,,In fact, if you're not uncertain, you're probably\Nwrong. Dialogue: 0,0:07:33.89,0:07:38.42,Default,,0000,0000,0000,,I want you to quantify that uncertainty. Embrace\Nit. Dialogue: 0,0:07:38.42,0:07:40.38,Default,,0000,0000,0000,,Are there things that you're being asked to\Ndo Dialogue: 0,0:07:40.38,0:07:42.70,Default,,0000,0000,0000,,that you don't know how they're gonna spa-\Nlike, Dialogue: 0,0:07:42.70,0:07:45.91,Default,,0000,0000,0000,,turn out? Maybe, like, you've got to load\Na Dialogue: 0,0:07:45.91,0:07:47.85,Default,,0000,0000,0000,,whole of data into the database and you're\Nnot Dialogue: 0,0:07:47.85,0:07:50.49,Default,,0000,0000,0000,,sure if it's gonna handle that. Maybe you've\Ngot Dialogue: 0,0:07:50.49,0:07:53.24,Default,,0000,0000,0000,,to make some, like, flippy clicky thing that's\Ngonna Dialogue: 0,0:07:53.24,0:07:56.35,Default,,0000,0000,0000,,be, like, really hard to implement in Internet\NExplorer Dialogue: 0,0:07:56.35,0:07:58.91,Default,,0000,0000,0000,,8. Do you know how that's gonna work? Maybe Dialogue: 0,0:07:58.91,0:08:00.58,Default,,0000,0000,0000,,it will. Maybe it won't. Dialogue: 0,0:08:00.58,0:08:03.67,Default,,0000,0000,0000,,Raise these things up. Let other people know.\NIf Dialogue: 0,0:08:03.67,0:08:05.67,Default,,0000,0000,0000,,they're asking you to do this work, say, you Dialogue: 0,0:08:05.67,0:08:08.49,Default,,0000,0000,0000,,know, I'm not really sure about how this is Dialogue: 0,0:08:08.49,0:08:11.61,Default,,0000,0000,0000,,gonna impact our database. I'm not really\Nsure whether Dialogue: 0,0:08:11.61,0:08:14.32,Default,,0000,0000,0000,,IE 8's gonna support this user interaction\Nyou're asking Dialogue: 0,0:08:14.32,0:08:18.25,Default,,0000,0000,0000,,for. This is helpful, because it gives the\Nother Dialogue: 0,0:08:18.25,0:08:20.89,Default,,0000,0000,0000,,person a better understanding of what you\Nneed to Dialogue: 0,0:08:20.89,0:08:21.72,Default,,0000,0000,0000,,be doing. Dialogue: 0,0:08:21.72,0:08:28.29,Default,,0000,0000,0000,,Now, next, play a spread. Tell them a story. Dialogue: 0,0:08:28.29,0:08:32.10,Default,,0000,0000,0000,,If everything goes well, I think that this\Nmight Dialogue: 0,0:08:32.10,0:08:34.98,Default,,0000,0000,0000,,be done in a week. If I need to Dialogue: 0,0:08:34.98,0:08:38.19,Default,,0000,0000,0000,,denormalize my database, if I need to do something Dialogue: 0,0:08:38.19,0:08:41.14,Default,,0000,0000,0000,,really crazy to get this supported cross-browser,\Nthis could Dialogue: 0,0:08:41.14,0:08:44.57,Default,,0000,0000,0000,,take me four weeks. Look, it's a lot easier Dialogue: 0,0:08:44.57,0:08:46.87,Default,,0000,0000,0000,,for you to hit an estimate, a range, than Dialogue: 0,0:08:46.87,0:08:49.19,Default,,0000,0000,0000,,it is for you to give them one hard Dialogue: 0,0:08:49.19,0:08:52.58,Default,,0000,0000,0000,,number. So that's great for us. But it's also Dialogue: 0,0:08:52.58,0:08:54.49,Default,,0000,0000,0000,,good for the person asking you to do the Dialogue: 0,0:08:54.49,0:08:57.04,Default,,0000,0000,0000,,work. Because you're giving them a story about\Nthe Dialogue: 0,0:08:57.04,0:09:00.46,Default,,0000,0000,0000,,future. You're telling them useful information\Nabout how this Dialogue: 0,0:09:00.46,0:09:04.82,Default,,0000,0000,0000,,could play out. And if they've got that information, Dialogue: 0,0:09:04.82,0:09:08.39,Default,,0000,0000,0000,,they can start making better, better use of\Nthat. Dialogue: 0,0:09:08.39,0:09:10.56,Default,,0000,0000,0000,,They can plan better based on that. And it Dialogue: 0,0:09:10.56,0:09:13.78,Default,,0000,0000,0000,,starts a better dialogue between you. Dialogue: 0,0:09:13.78,0:09:17.72,Default,,0000,0000,0000,,But you're not done there. You've got to deal Dialogue: 0,0:09:17.72,0:09:24.72,Default,,0000,0000,0000,,with this uncertainty. Nobody likes to get\Nbad news. Dialogue: 0,0:09:25.36,0:09:28.37,Default,,0000,0000,0000,,Nobody likes to find out that the project\Nis Dialogue: 0,0:09:28.37,0:09:30.73,Default,,0000,0000,0000,,doomed. But you know when they like to hear Dialogue: 0,0:09:30.73,0:09:33.16,Default,,0000,0000,0000,,that? Never. OK. Do you know when they'll\Ntolerate Dialogue: 0,0:09:33.16,0:09:36.36,Default,,0000,0000,0000,,it? They'll tolerate it right at the very\Nbeginning. Dialogue: 0,0:09:36.36,0:09:38.53,Default,,0000,0000,0000,,You know when they won't tolerate it? In the Dialogue: 0,0:09:38.53,0:09:39.58,Default,,0000,0000,0000,,eleventh hour. Dialogue: 0,0:09:39.58,0:09:42.55,Default,,0000,0000,0000,,Oh, man. Are you gonna be ever so happy Dialogue: 0,0:09:42.55,0:09:46.05,Default,,0000,0000,0000,,when your fellow developer says, hey, guys,\NI know Dialogue: 0,0:09:46.05,0:09:49.21,Default,,0000,0000,0000,,we're gonna ship, but I just checked the clicky Dialogue: 0,0:09:49.21,0:09:53.17,Default,,0000,0000,0000,,flippy thing in IE-8, and it doesn't work. Dialogue: 0,0:09:53.17,0:09:55.88,Default,,0000,0000,0000,,Wait, we're supposed to ship when? Dialogue: 0,0:09:55.88,0:09:58.32,Default,,0000,0000,0000,,Nobody wants to find out that the uncertainty\Ngot Dialogue: 0,0:09:58.32,0:10:01.28,Default,,0000,0000,0000,,left to the end. So do it first. It's Dialogue: 0,0:10:01.28,0:10:04.98,Default,,0000,0000,0000,,really hard to do this, but deal with uncertainty Dialogue: 0,0:10:04.98,0:10:07.72,Default,,0000,0000,0000,,up front. That way, when you find out that Dialogue: 0,0:10:07.72,0:10:10.46,Default,,0000,0000,0000,,something's going to take a long time, you\Ncan Dialogue: 0,0:10:10.46,0:10:12.90,Default,,0000,0000,0000,,communicate that back to people, and you guys\Ncan Dialogue: 0,0:10:12.90,0:10:15.74,Default,,0000,0000,0000,,adjust your plans to accommodate that. Dialogue: 0,0:10:15.74,0:10:17.29,Default,,0000,0000,0000,,I know. We always want to do the fun Dialogue: 0,0:10:17.29,0:10:19.40,Default,,0000,0000,0000,,things first. I want to like, jump in and Dialogue: 0,0:10:19.40,0:10:21.95,Default,,0000,0000,0000,,do the stuff that I know really well first, Dialogue: 0,0:10:21.95,0:10:24.69,Default,,0000,0000,0000,,because I feel like I'm making progress. That's\Na Dialogue: 0,0:10:24.69,0:10:28.94,Default,,0000,0000,0000,,great way to set yourself up for failure later. Dialogue: 0,0:10:28.94,0:10:32.84,Default,,0000,0000,0000,,Now, doing that alone isn't enough. Dialogue: 0,0:10:32.84,0:10:39.26,Default,,0000,0000,0000,,You remember that estimate? Change it. Change\Nit continuously. Dialogue: 0,0:10:39.26,0:10:41.48,Default,,0000,0000,0000,,As you learn new things, as you figure out Dialogue: 0,0:10:41.48,0:10:44.46,Default,,0000,0000,0000,,the uncertain things, and as you make progress,\Ncircle Dialogue: 0,0:10:44.46,0:10:47.91,Default,,0000,0000,0000,,back and tell anybody who depends on you how Dialogue: 0,0:10:47.91,0:10:51.06,Default,,0000,0000,0000,,long this is gonna take. Give them your vision Dialogue: 0,0:10:51.06,0:10:53.62,Default,,0000,0000,0000,,of the future. Give them your mental model\Nof Dialogue: 0,0:10:53.62,0:10:56.74,Default,,0000,0000,0000,,what the risks are. Give them the understanding\Nthat Dialogue: 0,0:10:56.74,0:10:59.42,Default,,0000,0000,0000,,you have, right now, about what you think\Nis Dialogue: 0,0:10:59.42,0:11:01.63,Default,,0000,0000,0000,,gonna happen. Dialogue: 0,0:11:01.63,0:11:03.53,Default,,0000,0000,0000,,Communicate often. Dialogue: 0,0:11:03.53,0:11:08.46,Default,,0000,0000,0000,,All right. Let's talk about the Dark Arts\Nof Dialogue: 0,0:11:08.46,0:11:11.67,Default,,0000,0000,0000,,project management, for a moment. Look, you\Nknow what Dialogue: 0,0:11:11.67,0:11:13.42,Default,,0000,0000,0000,,you're doing. You know why you're doing it.\NYou've Dialogue: 0,0:11:13.42,0:11:18.48,Default,,0000,0000,0000,,got an estimate and now. Oh. Shoot. Dialogue: 0,0:11:18.48,0:11:23.30,Default,,0000,0000,0000,,We can get screwed, as developers. We think\Nthat Dialogue: 0,0:11:23.30,0:11:28.71,Default,,0000,0000,0000,,we're all logical. That we're sane. Now. This\Never Dialogue: 0,0:11:28.71,0:11:30.70,Default,,0000,0000,0000,,happen to you? It happens to me all the Dialogue: 0,0:11:30.70,0:11:32.36,Default,,0000,0000,0000,,time. Somebody comes up to me and they say, Dialogue: 0,0:11:32.36,0:11:33.62,Default,,0000,0000,0000,,hey, Adam, how long's it gonna take? And I Dialogue: 0,0:11:33.62,0:11:35.66,Default,,0000,0000,0000,,say, it's gonna take about three weeks. And\Nthey Dialogue: 0,0:11:35.66,0:11:37.57,Default,,0000,0000,0000,,say, look, we need this done really quickly.\NCould Dialogue: 0,0:11:37.57,0:11:39.99,Default,,0000,0000,0000,,you maybe do it in one? And I say. Dialogue: 0,0:11:39.99,0:11:43.12,Default,,0000,0000,0000,,Well. Oh. How about two weeks? Dialogue: 0,0:11:43.12,0:11:44.51,Default,,0000,0000,0000,,I thought that I was just being nice. I Dialogue: 0,0:11:44.51,0:11:46.74,Default,,0000,0000,0000,,thought that I was just splitting the difference,\Nright. Dialogue: 0,0:11:46.74,0:11:48.09,Default,,0000,0000,0000,,Wrong. I just screwed myself. Dialogue: 0,0:11:48.09,0:11:52.36,Default,,0000,0000,0000,,It's natural for people to haggle. But you\Ndon't Dialogue: 0,0:11:52.36,0:11:55.94,Default,,0000,0000,0000,,win when people are estima- or bargaining\Nover estimates. Dialogue: 0,0:11:55.94,0:11:58.94,Default,,0000,0000,0000,,Look, you're estimate is your best understanding\Nof what Dialogue: 0,0:11:58.94,0:12:01.74,Default,,0000,0000,0000,,the future holds. What made it go from three Dialogue: 0,0:12:01.74,0:12:04.76,Default,,0000,0000,0000,,weeks to two weeks? How did you suddenly manage Dialogue: 0,0:12:04.76,0:12:08.64,Default,,0000,0000,0000,,to shave off a whole week of work in Dialogue: 0,0:12:08.64,0:12:11.09,Default,,0000,0000,0000,,five seconds? Cause I want to know. I need Dialogue: 0,0:12:11.09,0:12:12.82,Default,,0000,0000,0000,,to be able to do that later, so you Dialogue: 0,0:12:12.82,0:12:14.24,Default,,0000,0000,0000,,come up and you tell me. Dialogue: 0,0:12:14.24,0:12:17.22,Default,,0000,0000,0000,,No, look, you can't negotiate time. But you\Ncan Dialogue: 0,0:12:17.22,0:12:21.92,Default,,0000,0000,0000,,negotiate features. And as you learn more\Nabout the Dialogue: 0,0:12:21.92,0:12:25.74,Default,,0000,0000,0000,,project, you can re-estimate. Moral of this\Nstory, don't Dialogue: 0,0:12:25.74,0:12:28.41,Default,,0000,0000,0000,,give people estimates that you think are gonna\Nmake Dialogue: 0,0:12:28.41,0:12:30.99,Default,,0000,0000,0000,,them happy. Give them estimates that you think\Nare Dialogue: 0,0:12:30.99,0:12:32.10,Default,,0000,0000,0000,,true. Dialogue: 0,0:12:32.10,0:12:33.59,Default,,0000,0000,0000,,If they keep badgering you about it, point\Nit Dialogue: 0,0:12:33.59,0:12:37.91,Default,,0000,0000,0000,,out. Say, hey, look, I know what you're doing Dialogue: 0,0:12:37.91,0:12:42.29,Default,,0000,0000,0000,,here. I see what you're doing. Estimation\Nbargaining. It's Dialogue: 0,0:12:42.29,0:12:44.47,Default,,0000,0000,0000,,not gonna work. Not only is it not gonna Dialogue: 0,0:12:44.47,0:12:46.84,Default,,0000,0000,0000,,work for me, it's not gonna work for you. Dialogue: 0,0:12:46.84,0:12:50.01,Default,,0000,0000,0000,,If you give into this kind of thing, you're Dialogue: 0,0:12:50.01,0:12:53.72,Default,,0000,0000,0000,,actually setting up not just yourself for\Ntrouble but Dialogue: 0,0:12:53.72,0:12:56.87,Default,,0000,0000,0000,,your team. The people who rely on you. And, Dialogue: 0,0:12:56.87,0:12:58.37,Default,,0000,0000,0000,,whether or not the person asking you to do Dialogue: 0,0:12:58.37,0:13:00.39,Default,,0000,0000,0000,,the work knows it, you're setting them up\Nfor Dialogue: 0,0:13:00.39,0:13:03.30,Default,,0000,0000,0000,,failure as well. Because they depend on that\Nestimate Dialogue: 0,0:13:03.30,0:13:05.27,Default,,0000,0000,0000,,that you just gave them. Dialogue: 0,0:13:05.27,0:13:07.57,Default,,0000,0000,0000,,So, you know what you're doing. You know why Dialogue: 0,0:13:07.57,0:13:09.81,Default,,0000,0000,0000,,you're doing it. You've got an estimate. You\Ndefended Dialogue: 0,0:13:09.81,0:13:13.35,Default,,0000,0000,0000,,it. Maybe you shouldn't do it at all. There Dialogue: 0,0:13:13.35,0:13:17.73,Default,,0000,0000,0000,,are hidden costs involved in everything. Like\Ncomplexity costs. Dialogue: 0,0:13:17.73,0:13:22.32,Default,,0000,0000,0000,,Look, some features that we build incur future,\Nincur Dialogue: 0,0:13:22.32,0:13:25.39,Default,,0000,0000,0000,,costs on all the future work that we do. Dialogue: 0,0:13:25.39,0:13:27.88,Default,,0000,0000,0000,,For instance, if you build a new RESTful API, Dialogue: 0,0:13:27.88,0:13:31.32,Default,,0000,0000,0000,,great idea. If you build a new, like, axis Dialogue: 0,0:13:31.32,0:13:34.35,Default,,0000,0000,0000,,controls, you're just dropping in can-can.\NIf you build, Dialogue: 0,0:13:34.35,0:13:39.97,Default,,0000,0000,0000,,like, a new mo- native mobile client. Yeah.\NYou're Dialogue: 0,0:13:39.97,0:13:44.14,Default,,0000,0000,0000,,not done there. From now on, every new feature Dialogue: 0,0:13:44.14,0:13:47.23,Default,,0000,0000,0000,,that you implement has to take those old features Dialogue: 0,0:13:47.23,0:13:50.38,Default,,0000,0000,0000,,into account. So what you just did is you Dialogue: 0,0:13:50.38,0:13:53.34,Default,,0000,0000,0000,,made it so that your future work, future work, Dialogue: 0,0:13:53.34,0:13:55.53,Default,,0000,0000,0000,,is gonna hate past you. Dialogue: 0,0:13:55.53,0:14:00.33,Default,,0000,0000,0000,,You're just incurring new costs for the future.\NSo Dialogue: 0,0:14:00.33,0:14:03.15,Default,,0000,0000,0000,,watch out for these cost-cutting concerns.\Nthey can really Dialogue: 0,0:14:03.15,0:14:04.68,Default,,0000,0000,0000,,bite us sometimes. Dialogue: 0,0:14:04.68,0:14:07.87,Default,,0000,0000,0000,,Now, there are ways to do this that are Dialogue: 0,0:14:07.87,0:14:09.72,Default,,0000,0000,0000,,gonna cut down on those costs. You can never Dialogue: 0,0:14:09.72,0:14:12.81,Default,,0000,0000,0000,,get rid of them entirely. But, if you want Dialogue: 0,0:14:12.81,0:14:16.38,Default,,0000,0000,0000,,to, do the extra engineering up front, factor\Nthat Dialogue: 0,0:14:16.38,0:14:19.44,Default,,0000,0000,0000,,into your original estimate. Let the people\Nknow that Dialogue: 0,0:14:19.44,0:14:22.75,Default,,0000,0000,0000,,you're gonna need a little bit more time. Dialogue: 0,0:14:22.75,0:14:25.84,Default,,0000,0000,0000,,What about operational costs? Look, are you\Nintroducing new Dialogue: 0,0:14:25.84,0:14:27.91,Default,,0000,0000,0000,,moving parts? You're gonna build a new job\Nqueue. Dialogue: 0,0:14:27.91,0:14:30.29,Default,,0000,0000,0000,,You're gonna throw resq and redis in place.\NThey're Dialogue: 0,0:14:30.29,0:14:32.93,Default,,0000,0000,0000,,awesome tech. But guess what? They're costly. Dialogue: 0,0:14:32.93,0:14:35.88,Default,,0000,0000,0000,,How are you gonna test this in production\Nserver? Dialogue: 0,0:14:35.88,0:14:38.06,Default,,0000,0000,0000,,How are you gonna monitor it? How are you Dialogue: 0,0:14:38.06,0:14:40.09,Default,,0000,0000,0000,,gonna deploy this? How are you gonna make\Nsure Dialogue: 0,0:14:40.09,0:14:42.66,Default,,0000,0000,0000,,that it's running every time you spin up a Dialogue: 0,0:14:42.66,0:14:44.64,Default,,0000,0000,0000,,new server? Dialogue: 0,0:14:44.64,0:14:49.50,Default,,0000,0000,0000,,It's not necessarily hard. But it does take\Ntime. Dialogue: 0,0:14:49.50,0:14:51.68,Default,,0000,0000,0000,,And once you've done it, it still takes time. Dialogue: 0,0:14:51.68,0:14:56.46,Default,,0000,0000,0000,,And you know what? When resq goes down, who Dialogue: 0,0:14:56.46,0:14:59.36,Default,,0000,0000,0000,,are they gonna call? They're gonna call you.\NYou're Dialogue: 0,0:14:59.36,0:15:01.57,Default,,0000,0000,0000,,the one that put it in place, right. So Dialogue: 0,0:15:01.57,0:15:04.17,Default,,0000,0000,0000,,dealing with that is gonna take more time\Nout Dialogue: 0,0:15:04.17,0:15:06.94,Default,,0000,0000,0000,,of what you consider to be your budget for Dialogue: 0,0:15:06.94,0:15:10.24,Default,,0000,0000,0000,,developing. Dialogue: 0,0:15:10.24,0:15:13.72,Default,,0000,0000,0000,,Support costs. These are awesome. There are\Na lot Dialogue: 0,0:15:13.72,0:15:15.72,Default,,0000,0000,0000,,of things that we can do as developers that Dialogue: 0,0:15:15.72,0:15:18.10,Default,,0000,0000,0000,,are just really easy. We can knock out a Dialogue: 0,0:15:18.10,0:15:23.22,Default,,0000,0000,0000,,feature in like ten minutes. The downside?\NNobody understands Dialogue: 0,0:15:23.22,0:15:25.46,Default,,0000,0000,0000,,how that feature works. Dialogue: 0,0:15:25.46,0:15:28.65,Default,,0000,0000,0000,,So what if your users don't get it? Like, Dialogue: 0,0:15:28.65,0:15:30.55,Default,,0000,0000,0000,,you built this awesome thing, and they've\Ngot no Dialogue: 0,0:15:30.55,0:15:32.34,Default,,0000,0000,0000,,clue what it does. Who are they gonna talk Dialogue: 0,0:15:32.34,0:15:34.57,Default,,0000,0000,0000,,to? Well, if you've got one, they're gonna\Ntalk Dialogue: 0,0:15:34.57,0:15:37.09,Default,,0000,0000,0000,,to your support team. I hope your support\Nteam Dialogue: 0,0:15:37.09,0:15:40.21,Default,,0000,0000,0000,,understands - your support team doesn't understand\Nit. OK. Dialogue: 0,0:15:40.21,0:15:44.23,Default,,0000,0000,0000,,Awesome. Your support team's now talking to\Nyou. Dialogue: 0,0:15:44.23,0:15:46.78,Default,,0000,0000,0000,,And that takes time that you're gonna be not Dialogue: 0,0:15:46.78,0:15:50.37,Default,,0000,0000,0000,,able to develop in. What if your business,\Nas Dialogue: 0,0:15:50.37,0:15:56.65,Default,,0000,0000,0000,,a whole, doesn't get it? Meetings. That's\Nwhat. And Dialogue: 0,0:15:56.65,0:15:58.45,Default,,0000,0000,0000,,you know what meetings mean? It's not just\Nyour Dialogue: 0,0:15:58.45,0:16:01.53,Default,,0000,0000,0000,,time that's being used up then, it's the entire Dialogue: 0,0:16:01.53,0:16:04.44,Default,,0000,0000,0000,,company. Everyone around that table? You're\Nsinking more and Dialogue: 0,0:16:04.44,0:16:06.60,Default,,0000,0000,0000,,more costs into this. Dialogue: 0,0:16:06.60,0:16:10.29,Default,,0000,0000,0000,,So, again, you can combat some of this, but Dialogue: 0,0:16:10.29,0:16:13.30,Default,,0000,0000,0000,,go back, update those estimates, to factor\Nthis in. Dialogue: 0,0:16:13.30,0:16:18.96,Default,,0000,0000,0000,,What about opportunity costs? Slightly different\Nthing. But think Dialogue: 0,0:16:18.96,0:16:20.97,Default,,0000,0000,0000,,about this. You can really only do one thing Dialogue: 0,0:16:20.97,0:16:24.81,Default,,0000,0000,0000,,at a time. So what's the highest priority\Nthing Dialogue: 0,0:16:24.81,0:16:27.01,Default,,0000,0000,0000,,for you to be doing right now? What's the Dialogue: 0,0:16:27.01,0:16:29.40,Default,,0000,0000,0000,,highest priority thing for your team? For\Nyour business Dialogue: 0,0:16:29.40,0:16:32.82,Default,,0000,0000,0000,,as a whole? Because, whatever you're doing\Nnow is Dialogue: 0,0:16:32.82,0:16:35.49,Default,,0000,0000,0000,,excluding every other feature that you could\Nbe working Dialogue: 0,0:16:35.49,0:16:40.22,Default,,0000,0000,0000,,on right now. Dialogue: 0,0:16:40.22,0:16:43.35,Default,,0000,0000,0000,,Think about it. Prioritize all the things\Nthat you Dialogue: 0,0:16:43.35,0:16:45.02,Default,,0000,0000,0000,,would like to be doing. All the things that Dialogue: 0,0:16:45.02,0:16:47.03,Default,,0000,0000,0000,,you know you should be doing. Make sure that Dialogue: 0,0:16:47.03,0:16:51.19,Default,,0000,0000,0000,,this is actually the most important thing.\NNot just Dialogue: 0,0:16:51.19,0:16:53.93,Default,,0000,0000,0000,,the most immediate thing that you need to\Ndeal Dialogue: 0,0:16:53.93,0:16:54.66,Default,,0000,0000,0000,,with. Dialogue: 0,0:16:54.66,0:16:58.19,Default,,0000,0000,0000,,Look, I'm not saying don't do anything, but\Nweigh Dialogue: 0,0:16:58.19,0:17:03.10,Default,,0000,0000,0000,,the costs. Understand them. Recognize them.\NEverything that we Dialogue: 0,0:17:03.10,0:17:07.24,Default,,0000,0000,0000,,do as developers costs us down the road. Choose Dialogue: 0,0:17:07.24,0:17:09.45,Default,,0000,0000,0000,,which ones you're willing to pay. Dialogue: 0,0:17:09.45,0:17:14.09,Default,,0000,0000,0000,,All right. More Dark Arts, cause I love these. Dialogue: 0,0:17:14.09,0:17:17.04,Default,,0000,0000,0000,,This one's the most insidious. This one trips\Nus Dialogue: 0,0:17:17.04,0:17:21.30,Default,,0000,0000,0000,,up as developers, because we've got egos,\Nand it's Dialogue: 0,0:17:21.30,0:17:25.70,Default,,0000,0000,0000,,really easy to manipulate us. This happen\Nto you? Dialogue: 0,0:17:25.70,0:17:26.97,Default,,0000,0000,0000,,Somebody comes up to you, they say, hey, how Dialogue: 0,0:17:26.97,0:17:28.05,Default,,0000,0000,0000,,long's it gonna take? And you say, I don't Dialogue: 0,0:17:28.05,0:17:30.52,Default,,0000,0000,0000,,know, about a week? And they say, really?\NOh, Dialogue: 0,0:17:30.52,0:17:34.84,Default,,0000,0000,0000,,and they look so disappointed. And then they\Nsay, Dialogue: 0,0:17:34.84,0:17:38.41,Default,,0000,0000,0000,,I thought you were smarter than that. Dialogue: 0,0:17:38.41,0:17:42.63,Default,,0000,0000,0000,,Wow. That hurts. Then, it's like, kicking\Nyou when Dialogue: 0,0:17:42.63,0:17:45.72,Default,,0000,0000,0000,,you're down. They say, oh, I'll go ask her. Dialogue: 0,0:17:45.72,0:17:49.05,Default,,0000,0000,0000,,I'll go ask the intern. She seems pretty smart. Dialogue: 0,0:17:49.05,0:17:52.18,Default,,0000,0000,0000,,Ah. Even worse. You know what happens next?\NI Dialogue: 0,0:17:52.18,0:17:54.88,Default,,0000,0000,0000,,don't know about you. But me? I start begging Dialogue: 0,0:17:54.88,0:17:56.74,Default,,0000,0000,0000,,to do the work. I'm like, you know what? Dialogue: 0,0:17:56.74,0:17:59.36,Default,,0000,0000,0000,,Did I say a week? I meant maybe, like, Dialogue: 0,0:17:59.36,0:18:00.08,Default,,0000,0000,0000,,three days. Dialogue: 0,0:18:00.08,0:18:03.02,Default,,0000,0000,0000,,Whoa, stop going towards the intern. One day?\NI'll Dialogue: 0,0:18:03.02,0:18:05.93,Default,,0000,0000,0000,,have it to you by noon. Dialogue: 0,0:18:05.93,0:18:08.09,Default,,0000,0000,0000,,Fuck. Dialogue: 0,0:18:08.09,0:18:12.79,Default,,0000,0000,0000,,Aw. Don't let your ego get you into trouble. Dialogue: 0,0:18:12.79,0:18:15.93,Default,,0000,0000,0000,,Stand by those estimates. Really, the best\Nthing that Dialogue: 0,0:18:15.93,0:18:18.36,Default,,0000,0000,0000,,we can be as developers, in this case, is Dialogue: 0,0:18:18.36,0:18:21.85,Default,,0000,0000,0000,,have a little humility. And if you see somebody Dialogue: 0,0:18:21.85,0:18:24.61,Default,,0000,0000,0000,,trying to do this to you, call their bluff. Dialogue: 0,0:18:24.61,0:18:27.39,Default,,0000,0000,0000,,Like, they're not really gonna go to the intern. Dialogue: 0,0:18:27.39,0:18:29.24,Default,,0000,0000,0000,,Well, they might. And it might be a learning Dialogue: 0,0:18:29.24,0:18:30.96,Default,,0000,0000,0000,,experience for everyone. Dialogue: 0,0:18:30.96,0:18:35.22,Default,,0000,0000,0000,,But name this. Say, I know what you're doing Dialogue: 0,0:18:35.22,0:18:37.91,Default,,0000,0000,0000,,there. It's not gonna work on me. Stand up Dialogue: 0,0:18:37.91,0:18:42.43,Default,,0000,0000,0000,,for yourself. And if you can't, find a new Dialogue: 0,0:18:42.43,0:18:43.15,Default,,0000,0000,0000,,job. Dialogue: 0,0:18:43.15,0:18:47.35,Default,,0000,0000,0000,,All right. Deadlines. Like, I've got one coming\Nup Dialogue: 0,0:18:47.35,0:18:52.76,Default,,0000,0000,0000,,in eleven minutes. Dialogue: 0,0:18:52.76,0:18:57.19,Default,,0000,0000,0000,,Deadlines come in all forms. They come in\Na Dialogue: 0,0:18:57.19,0:19:00.74,Default,,0000,0000,0000,,spectrum. From soft deadlines to hard deadlines.\NSoft deadlines Dialogue: 0,0:19:00.74,0:19:03.41,Default,,0000,0000,0000,,are things like goals. They're things we would\Nlike Dialogue: 0,0:19:03.41,0:19:06.13,Default,,0000,0000,0000,,to achieve. For instance, we would like to\Nship Dialogue: 0,0:19:06.13,0:19:08.19,Default,,0000,0000,0000,,this by the end of the week. We would Dialogue: 0,0:19:08.19,0:19:11.19,Default,,0000,0000,0000,,like to get this out by, I don't know, Dialogue: 0,0:19:11.19,0:19:14.00,Default,,0000,0000,0000,,this next conference. Hey, we're gonna try\Nto get Dialogue: 0,0:19:14.00,0:19:17.57,Default,,0000,0000,0000,,this out for the customer by Q1. Dialogue: 0,0:19:17.57,0:19:23.07,Default,,0000,0000,0000,,Hard deadlines are things like, RailsConf.\NFor me, anyways. Dialogue: 0,0:19:23.07,0:19:28.22,Default,,0000,0000,0000,,Can you imagine, RubyCentral sending out an\Nemail. They Dialogue: 0,0:19:28.22,0:19:31.15,Default,,0000,0000,0000,,say, hey guys, funny story. Adam didn't do\Nhis Dialogue: 0,0:19:31.15,0:19:37.43,Default,,0000,0000,0000,,slides, so we're postponing RubyConf by, like,\Na week. Dialogue: 0,0:19:37.43,0:19:38.72,Default,,0000,0000,0000,,Just change your reservations. Dialogue: 0,0:19:38.72,0:19:41.15,Default,,0000,0000,0000,,Yeah. I'm not DHH, so I can't get away Dialogue: 0,0:19:41.15,0:19:42.38,Default,,0000,0000,0000,,with that. Dialogue: 0,0:19:42.38,0:19:48.13,Default,,0000,0000,0000,,It's a hard deadline. So when hard deadlines\Ncome Dialogue: 0,0:19:48.13,0:19:51.46,Default,,0000,0000,0000,,up. Actually, when all deadlines come up,\Nwhat do Dialogue: 0,0:19:51.46,0:19:54.26,Default,,0000,0000,0000,,we do? You gotta deal with it. Ignoring it's Dialogue: 0,0:19:54.26,0:19:59.18,Default,,0000,0000,0000,,not gonna work, and panicking also doesn't\Nwork. So, Dialogue: 0,0:19:59.18,0:20:01.07,Default,,0000,0000,0000,,we've really got four options. The first two\Nare Dialogue: 0,0:20:01.07,0:20:03.71,Default,,0000,0000,0000,,ones that we as developers think that we really Dialogue: 0,0:20:03.71,0:20:06.42,Default,,0000,0000,0000,,like, and the second two are ones that managers Dialogue: 0,0:20:06.42,0:20:09.44,Default,,0000,0000,0000,,think that they really like. Nobody really\Nlikes any Dialogue: 0,0:20:09.44,0:20:12.22,Default,,0000,0000,0000,,of these options, when you get down to it. Dialogue: 0,0:20:12.22,0:20:15.60,Default,,0000,0000,0000,,But, if it's a soft deadline, if it's just Dialogue: 0,0:20:15.60,0:20:20.93,Default,,0000,0000,0000,,a goal, you guys can ship late. You can Dialogue: 0,0:20:20.93,0:20:23.98,Default,,0000,0000,0000,,miss. Maybe. It's probably not the end of\Nthe Dialogue: 0,0:20:23.98,0:20:27.50,Default,,0000,0000,0000,,world. Don't do this all the time, cause you're Dialogue: 0,0:20:27.50,0:20:32.48,Default,,0000,0000,0000,,gonna look like an idiot. But recognize. Weigh\Nthe Dialogue: 0,0:20:32.48,0:20:37.57,Default,,0000,0000,0000,,balance, weigh the thingies that you've gotta\Nweigh. I Dialogue: 0,0:20:37.57,0:20:39.32,Default,,0000,0000,0000,,don't know. Dialogue: 0,0:20:39.32,0:20:42.89,Default,,0000,0000,0000,,Yeah. This talk is about work. Not about how Dialogue: 0,0:20:42.89,0:20:45.11,Default,,0000,0000,0000,,to give a good talk. Dialogue: 0,0:20:45.11,0:20:51.33,Default,,0000,0000,0000,,Rad. So, yeah. Sometimes you can ship late.\NOf Dialogue: 0,0:20:51.33,0:20:53.60,Default,,0000,0000,0000,,course, there are hard deadlines, right. There\Nare things Dialogue: 0,0:20:53.60,0:20:58.35,Default,,0000,0000,0000,,like RubyConf. And I can't miss this deadline.\NIf Dialogue: 0,0:20:58.35,0:21:00.60,Default,,0000,0000,0000,,I did, we would all be standing here and Dialogue: 0,0:21:00.60,0:21:03.56,Default,,0000,0000,0000,,I would be stammering like I was. So what Dialogue: 0,0:21:03.56,0:21:04.69,Default,,0000,0000,0000,,else can we do? Dialogue: 0,0:21:04.69,0:21:07.76,Default,,0000,0000,0000,,Well, we can cut scope. We can cut features. Dialogue: 0,0:21:07.76,0:21:13.84,Default,,0000,0000,0000,,Like, honestly, prioritize the things that\Nyou've gotta do. Dialogue: 0,0:21:13.84,0:21:16.47,Default,,0000,0000,0000,,Figure out what you can get done by the Dialogue: 0,0:21:16.47,0:21:19.22,Default,,0000,0000,0000,,deadline. Cut the rest. Dialogue: 0,0:21:19.22,0:21:23.33,Default,,0000,0000,0000,,For instance, I illustrated like all of these\Nslides, Dialogue: 0,0:21:23.33,0:21:25.61,Default,,0000,0000,0000,,except for, I got about here and I ran Dialogue: 0,0:21:25.61,0:21:30.16,Default,,0000,0000,0000,,out of time. So I cut my little illustration. Dialogue: 0,0:21:30.16,0:21:36.91,Default,,0000,0000,0000,,One of the things that is scary about this, Dialogue: 0,0:21:36.91,0:21:40.59,Default,,0000,0000,0000,,though, is that some of the things that get Dialogue: 0,0:21:40.59,0:21:43.91,Default,,0000,0000,0000,,cut are the things that we, as developers,\Nthink Dialogue: 0,0:21:43.91,0:21:50.91,Default,,0000,0000,0000,,are important. Performance. Testing. Correctness.\NAll these things can Dialogue: 0,0:21:55.66,0:21:57.99,Default,,0000,0000,0000,,get cut if you're not careful. So if you Dialogue: 0,0:21:57.99,0:22:01.71,Default,,0000,0000,0000,,value that, make sure that it's put high in Dialogue: 0,0:22:01.71,0:22:04.49,Default,,0000,0000,0000,,your priority. Make sure that you guard that\Nagainst Dialogue: 0,0:22:04.49,0:22:06.43,Default,,0000,0000,0000,,the deadline. Dialogue: 0,0:22:06.43,0:22:10.77,Default,,0000,0000,0000,,OK. Another option. If you're not gonna get\Nit Dialogue: 0,0:22:10.77,0:22:13.23,Default,,0000,0000,0000,,done and you can't ship later and you can't Dialogue: 0,0:22:13.23,0:22:16.77,Default,,0000,0000,0000,,cut features, well you can add more people,\Nright? Dialogue: 0,0:22:16.77,0:22:19.26,Default,,0000,0000,0000,,Well, you could go read the Mythical Man Month, Dialogue: 0,0:22:19.26,0:22:23.24,Default,,0000,0000,0000,,but basically boils down to this. Unless you've\Ngot Dialogue: 0,0:22:23.24,0:22:29.19,Default,,0000,0000,0000,,a project where everybody can work completely\Nindependently, you're Dialogue: 0,0:22:29.19,0:22:32.54,Default,,0000,0000,0000,,gonna have to start talking to each other.\NEh. Dialogue: 0,0:22:32.54,0:22:35.92,Default,,0000,0000,0000,,It's kind of uncomfortable. Dialogue: 0,0:22:35.92,0:22:40.32,Default,,0000,0000,0000,,So, I'm about to miss my deadline. They pull Dialogue: 0,0:22:40.32,0:22:42.30,Default,,0000,0000,0000,,you in to work with me. Now you and Dialogue: 0,0:22:42.30,0:22:44.13,Default,,0000,0000,0000,,I have to start talking. We've gotta make\Nsure Dialogue: 0,0:22:44.13,0:22:46.80,Default,,0000,0000,0000,,that we aren't gonna be stepping on each other's Dialogue: 0,0:22:46.80,0:22:48.59,Default,,0000,0000,0000,,toes. We've got to keep each other appraised\Nof Dialogue: 0,0:22:48.59,0:22:51.68,Default,,0000,0000,0000,,the situation. We've gotta understand which\Ndirection we're both Dialogue: 0,0:22:51.68,0:22:53.88,Default,,0000,0000,0000,,going in. Dialogue: 0,0:22:53.88,0:22:56.94,Default,,0000,0000,0000,,That adds overhead. And if you're splitting\Nup work Dialogue: 0,0:22:56.94,0:23:00.41,Default,,0000,0000,0000,,between two people, it means that you're gonna\Nstart, Dialogue: 0,0:23:00.41,0:23:02.49,Default,,0000,0000,0000,,like, depending on the other person to get\Nthings Dialogue: 0,0:23:02.49,0:23:05.17,Default,,0000,0000,0000,,done. And if I'm waiting on you and I'm Dialogue: 0,0:23:05.17,0:23:08.23,Default,,0000,0000,0000,,twiddling my thumbs, that's sort of wasted\Ntime. That's Dialogue: 0,0:23:08.23,0:23:10.89,Default,,0000,0000,0000,,time that's not actually going towards getting\Nthe work Dialogue: 0,0:23:10.89,0:23:12.41,Default,,0000,0000,0000,,out. Dialogue: 0,0:23:12.41,0:23:17.48,Default,,0000,0000,0000,,So, adding more people sometimes works. But\Nsometimes, it's Dialogue: 0,0:23:17.48,0:23:20.21,Default,,0000,0000,0000,,just gonna make everything go more slowly. Dialogue: 0,0:23:20.21,0:23:24.18,Default,,0000,0000,0000,,Oh, and if you do add more people, make Dialogue: 0,0:23:24.18,0:23:28.17,Default,,0000,0000,0000,,sure they get along. Cause nothing is more\Nawkward Dialogue: 0,0:23:28.17,0:23:32.15,Default,,0000,0000,0000,,than running up against a deadline, working\Nwith somebody Dialogue: 0,0:23:32.15,0:23:34.35,Default,,0000,0000,0000,,who you want to punch. Like, this is how Dialogue: 0,0:23:34.35,0:23:37.32,Default,,0000,0000,0000,,sparks fly, right? You don't want to do this. Dialogue: 0,0:23:37.32,0:23:38.85,Default,,0000,0000,0000,,All right. Dialogue: 0,0:23:38.85,0:23:42.87,Default,,0000,0000,0000,,The final way that you can deal with a Dialogue: 0,0:23:42.87,0:23:45.05,Default,,0000,0000,0000,,deadline. If you can't two people to do the Dialogue: 0,0:23:45.05,0:23:47.93,Default,,0000,0000,0000,,work twice as fast, maybe you can make one Dialogue: 0,0:23:47.93,0:23:53.21,Default,,0000,0000,0000,,person work twice as hard. Ah. This really\Nsucks. Dialogue: 0,0:23:53.21,0:23:54.67,Default,,0000,0000,0000,,And I'll tell you why. Dialogue: 0,0:23:54.67,0:24:01.43,Default,,0000,0000,0000,,It works. It can. Honestly. But it's not sustainable. Dialogue: 0,0:24:01.43,0:24:03.66,Default,,0000,0000,0000,,And I don't think any of us enjoy it. Dialogue: 0,0:24:03.66,0:24:05.63,Default,,0000,0000,0000,,Look, think about this. You've got eight hours\Nto Dialogue: 0,0:24:05.63,0:24:07.07,Default,,0000,0000,0000,,work. You've got eight hours to sleep. And\Nthen Dialogue: 0,0:24:07.07,0:24:09.25,Default,,0000,0000,0000,,you've got eight hours for your daily commute,\Nfor Dialogue: 0,0:24:09.25,0:24:11.62,Default,,0000,0000,0000,,cleaning up after your dog, for cooking dinner,\Nfor Dialogue: 0,0:24:11.62,0:24:14.15,Default,,0000,0000,0000,,spending time with your friends, your family,\Nfor reading Dialogue: 0,0:24:14.15,0:24:21.15,Default,,0000,0000,0000,,seventeenth century poetry. Dialogue: 0,0:24:21.20,0:24:23.59,Default,,0000,0000,0000,,Where's that overtime gonna come out of? I\Ngotta Dialogue: 0,0:24:23.59,0:24:27.57,Default,,0000,0000,0000,,hint for you. It's not coming out of work. Dialogue: 0,0:24:27.57,0:24:34.57,Default,,0000,0000,0000,,Bummer. OK, your only two remaining options\Nare sleep Dialogue: 0,0:24:34.57,0:24:38.04,Default,,0000,0000,0000,,and what I would like to call life. So, Dialogue: 0,0:24:38.04,0:24:41.41,Default,,0000,0000,0000,,if that time's coming out of sleep, you're\Ngonna Dialogue: 0,0:24:41.41,0:24:46.97,Default,,0000,0000,0000,,be tired. You're not gonna be very proficient.\NYou're Dialogue: 0,0:24:46.97,0:24:48.85,Default,,0000,0000,0000,,not gonna be thinking straight. Dialogue: 0,0:24:48.85,0:24:52.61,Default,,0000,0000,0000,,We make the stupidest mistakes when we're\Nup at Dialogue: 0,0:24:52.61,0:24:58.88,Default,,0000,0000,0000,,3 AM pounding on our keyboards. So quality\Ntakes Dialogue: 0,0:24:58.88,0:25:05.36,Default,,0000,0000,0000,,a hit. Shoot. Well, OK. What about life? Dialogue: 0,0:25:05.36,0:25:06.76,Default,,0000,0000,0000,,Use up a little bit of life to get Dialogue: 0,0:25:06.76,0:25:10.74,Default,,0000,0000,0000,,this out the door. This, this is the path Dialogue: 0,0:25:10.74,0:25:17.32,Default,,0000,0000,0000,,to burn out. To depression. Use it very sparingly. Dialogue: 0,0:25:17.32,0:25:20.30,Default,,0000,0000,0000,,Use it wisely. Think to yourself, is this\Nmore Dialogue: 0,0:25:20.30,0:25:23.52,Default,,0000,0000,0000,,important than cleaning up after my dog? Is\Nthis Dialogue: 0,0:25:23.52,0:25:28.89,Default,,0000,0000,0000,,more important than spending time with my\Nkids? Depends Dialogue: 0,0:25:28.89,0:25:34.62,Default,,0000,0000,0000,,on how much you like your kids, right. Dialogue: 0,0:25:34.62,0:25:36.94,Default,,0000,0000,0000,,Just be careful. That's all I can say. Dialogue: 0,0:25:36.94,0:25:39.13,Default,,0000,0000,0000,,All right. Let's talk about one more of the Dialogue: 0,0:25:39.13,0:25:45.37,Default,,0000,0000,0000,,Dark Arts. Deadline hardening. This is the\Nmagical thing. Dialogue: 0,0:25:45.37,0:25:47.30,Default,,0000,0000,0000,,Whoops. I don't want to show this to you Dialogue: 0,0:25:47.30,0:25:50.05,Default,,0000,0000,0000,,yet. I gotta tell you about it first. Because, Dialogue: 0,0:25:50.05,0:25:51.93,Default,,0000,0000,0000,,here's what I love about this one. It happens Dialogue: 0,0:25:51.93,0:25:54.80,Default,,0000,0000,0000,,to us all the time, and every time it Dialogue: 0,0:25:54.80,0:25:58.37,Default,,0000,0000,0000,,does, we're like, totally surprised that it\Nhappened. We're Dialogue: 0,0:25:58.37,0:26:01.62,Default,,0000,0000,0000,,like where? Where did that come from? And\NI'm Dialogue: 0,0:26:01.62,0:26:04.68,Default,,0000,0000,0000,,like, what? Didn't this happen to you last\Nweek? Dialogue: 0,0:26:04.68,0:26:07.60,Default,,0000,0000,0000,,Or yesterday? All right. Dialogue: 0,0:26:07.60,0:26:10.19,Default,,0000,0000,0000,,Here's roughly how it goes. Dialogue: 0,0:26:10.19,0:26:11.57,Default,,0000,0000,0000,,Somebody comes up to you and they're like,\Nhey, Dialogue: 0,0:26:11.57,0:26:13.25,Default,,0000,0000,0000,,let's try to release by the end of the Dialogue: 0,0:26:13.25,0:26:16.05,Default,,0000,0000,0000,,month. And you're like, um, I don't think\Nwe Dialogue: 0,0:26:16.05,0:26:18.78,Default,,0000,0000,0000,,can actually do that. But I'll try. Dialogue: 0,0:26:18.78,0:26:20.73,Default,,0000,0000,0000,,OK, and you go back to your keyboard really Dialogue: 0,0:26:20.73,0:26:26.74,Default,,0000,0000,0000,,quick, right. You know. Clock spins. Pages\Nfly off Dialogue: 0,0:26:26.74,0:26:31.31,Default,,0000,0000,0000,,the calendar. Eighties work montage. All of\Na sudden, Dialogue: 0,0:26:31.31,0:26:33.45,Default,,0000,0000,0000,,manager comes back and they're like, hey,\Nwe need Dialogue: 0,0:26:33.45,0:26:35.55,Default,,0000,0000,0000,,to release by the end of the month. And Dialogue: 0,0:26:35.55,0:26:39.28,Default,,0000,0000,0000,,you're like, wait, what? Why? Why do we need Dialogue: 0,0:26:39.28,0:26:40.78,Default,,0000,0000,0000,,to release by the end of the month? And Dialogue: 0,0:26:40.78,0:26:42.98,Default,,0000,0000,0000,,they're like, we've got customers waiting\Non it now. Dialogue: 0,0:26:42.98,0:26:46.24,Default,,0000,0000,0000,,It's like, what? Why, why did you promise\Nthat Dialogue: 0,0:26:46.24,0:26:49.31,Default,,0000,0000,0000,,to them? And I'll tell you why. They heard Dialogue: 0,0:26:49.31,0:26:51.77,Default,,0000,0000,0000,,you say that you were going to try to Dialogue: 0,0:26:51.77,0:26:53.73,Default,,0000,0000,0000,,do it by the end of the month. Now, Dialogue: 0,0:26:53.73,0:26:56.18,Default,,0000,0000,0000,,I know that what you said, in your head, Dialogue: 0,0:26:56.18,0:26:58.92,Default,,0000,0000,0000,,was hey. Get out of here. I know that Dialogue: 0,0:26:58.92,0:27:01.43,Default,,0000,0000,0000,,what you said was, leave me alone, I gotta Dialogue: 0,0:27:01.43,0:27:03.87,Default,,0000,0000,0000,,code. I know that what you said was, I Dialogue: 0,0:27:03.87,0:27:07.87,Default,,0000,0000,0000,,don't see you. Dialogue: 0,0:27:07.87,0:27:11.71,Default,,0000,0000,0000,,But what they heard is, I'm on it. Dialogue: 0,0:27:11.71,0:27:13.48,Default,,0000,0000,0000,,It's a bit of wishful thinking on their part, Dialogue: 0,0:27:13.48,0:27:17.37,Default,,0000,0000,0000,,but it's true. Look, don't commit to making\Nany Dialogue: 0,0:27:17.37,0:27:21.01,Default,,0000,0000,0000,,deadlines that you don't think that you can\Nmeet. Dialogue: 0,0:27:21.01,0:27:24.09,Default,,0000,0000,0000,,And saying that you'll try is committing. Dialogue: 0,0:27:24.09,0:27:26.93,Default,,0000,0000,0000,,Look, people are less likely to turn a goal, Dialogue: 0,0:27:26.93,0:27:30.61,Default,,0000,0000,0000,,a soft deadline, into a promise, a hard deadline, Dialogue: 0,0:27:30.61,0:27:32.65,Default,,0000,0000,0000,,if they think it's risky. When do they think Dialogue: 0,0:27:32.65,0:27:35.51,Default,,0000,0000,0000,,it's risky? They think it's risky when they\Nknow Dialogue: 0,0:27:35.51,0:27:38.82,Default,,0000,0000,0000,,that there's uncertainty. They know it's risky\Nwhen they Dialogue: 0,0:27:38.82,0:27:40.48,Default,,0000,0000,0000,,know that the amount of work that you've got Dialogue: 0,0:27:40.48,0:27:44.67,Default,,0000,0000,0000,,to do is large. And that you're likely to Dialogue: 0,0:27:44.67,0:27:46.84,Default,,0000,0000,0000,,go over the deadline. Dialogue: 0,0:27:46.84,0:27:51.36,Default,,0000,0000,0000,,So, communicate your status and risk often. Dialogue: 0,0:27:51.36,0:27:52.87,Default,,0000,0000,0000,,Communicate uncertainty. Dialogue: 0,0:27:52.87,0:27:57.17,Default,,0000,0000,0000,,If you take nothing else away from this, communicate. Dialogue: 0,0:27:57.17,0:28:00.35,Default,,0000,0000,0000,,Make sure that other people understand what\Nyour view Dialogue: 0,0:28:00.35,0:28:03.08,Default,,0000,0000,0000,,of the world is right now. Because if you Dialogue: 0,0:28:03.08,0:28:07.51,Default,,0000,0000,0000,,don't, that's how you're gonna end up with\Nunreasonable Dialogue: 0,0:28:07.51,0:28:11.40,Default,,0000,0000,0000,,estimates and. The other thing in my title.\NI Dialogue: 0,0:28:11.40,0:28:13.96,Default,,0000,0000,0000,,can't remember it. Awesome. Dialogue: 0,0:28:13.96,0:28:17.62,Default,,0000,0000,0000,,That's my talk. You guys have any questions?\NWait. Dialogue: 0,0:28:17.62,0:28:17.99,Default,,0000,0000,0000,,Clap first.