< Return to Video

RailsConf 2014 - Unreasonable Estimates and Improbable Goals by Adam Sanderson

  • 0:17 - 0:18
    ADAM SANDERSON: All right folks.
  • 0:18 - 0:21
    This is Unreasonable Estimates and
  • 0:21 - 0:24
    Improbable Goals. My name's Adam Sanderson.
  • 0:24 - 0:27
    I'm a full stack developer at LiquidPlanner.
  • 0:27 - 0:29
    I've been there for about six, nearly
  • 0:29 - 0:32
    seven years, working on Rails, databases,
  • 0:32 - 0:35
    like, front end, back end. You name it.
  • 0:35 - 0:37
    If you want to, you can find me on
  • 0:37 - 0:40
    GitHub. Twitter. These slides are gonna be
    on Speaker
  • 0:40 - 0:42
    Deck. It's all under Adam Sanderson. That
    makes it
  • 0:42 - 0:47
    easy. But more awkward, I write code, or I
  • 0:47 - 0:50
    write about code on monkeyandcrow dot com.
    If you
  • 0:50 - 0:52
    like the talks about, like, reading and learning
    about
  • 0:52 - 0:56
    Rails, I'm actually writing a series called
    reading Rails.
  • 0:56 - 0:59
    So go check that out if that's what you're
  • 0:59 - 1:01
    in to. And hey, it's RailsConf. You probably
    are.
  • 1:01 - 1:04
    So, like I said, I work for LiquidPlanner.
    We
  • 1:04 - 1:08
    make online project management software. Probably
    the most interesting
  • 1:08 - 1:10
    thing for you guys is that we do probabilistic
  • 1:10 - 1:14
    scheduling, which is pretty awesome. So if
    that sounds
  • 1:14 - 1:18
    kind of cool, like everyone else here, we're
    hiring.
  • 1:18 - 1:20
    And I need somebody to come help me build
  • 1:20 - 1:23
    new stuff. So really, if you're in Seattle,
    let
  • 1:23 - 1:25
    me know.
  • 1:25 - 1:27
    So, you can't really work on project management
    software
  • 1:27 - 1:32
    without thinking about the work of work. Specifically,
    I'm
  • 1:32 - 1:36
    talking about estimating projects, finding
    the hidden costs involved
  • 1:36 - 1:40
    in those, and then dealing with deadlines.
    Sounds like
  • 1:40 - 1:43
    fun, right? Sounds like life.
  • 1:43 - 1:46
    All right. How hard would it be? I get
  • 1:46 - 1:50
    asked this question all the time. People come
    up
  • 1:50 - 1:53
    to me, and they say, hey Adam, how hard
  • 1:53 - 1:55
    would it be? How hard would it be to
  • 1:55 - 1:57
    change all of our buttons from red to blue?
  • 1:57 - 1:59
    How hard would it be to implement a new,
  • 1:59 - 2:02
    like, class of user? How hard would it be
  • 2:02 - 2:08
    to implement email integration? What should
    I do?
  • 2:08 - 2:11
    Clarify. Before I tell somebody how hard it
    would
  • 2:11 - 2:13
    be - and, pro tip, they don't care how
  • 2:13 - 2:15
    hard you gotta hit the keyboard. What they're
    actually
  • 2:15 - 2:17
    asking is, how long is it gonna take you
  • 2:17 - 2:23
    to get this done? Before you tell them, clarify.
  • 2:23 - 2:25
    Make sure you know what they want. Make sure
  • 2:25 - 2:27
    that what's in your head is what's in their
  • 2:27 - 2:29
    head. Because a lot of times when people come
  • 2:29 - 2:34
    to us, developers have a very specific vocabulary.
    Things
  • 2:34 - 2:36
    that we think mean one thing mean a different
  • 2:36 - 2:39
    thing to somebody in sales, or marketing,
    or QA
  • 2:39 - 2:41
    or support.
  • 2:41 - 2:44
    So make sure that you know what they mean
  • 2:44 - 2:45
    when they say, hey, how hard would it be
  • 2:45 - 2:49
    to integrate email integration? Does that
    mean sending emails
  • 2:49 - 2:52
    out of our system? Does it mean receiving
    emails
  • 2:52 - 2:55
    from someone else? Does that mean a plugin
    for
  • 2:55 - 3:00
    like Outlook or Gmail? If you don't clarify
    up
  • 3:00 - 3:03
    front, you could spend a lot of time wandering
  • 3:03 - 3:05
    off into the woods, and when you come back
  • 3:05 - 3:08
    with your amazing feature, they're gonna look
    at it
  • 3:08 - 3:11
    and be like, what? What is this? And you'll
  • 3:11 - 3:14
    have just wasted, like, an hour. A day. A
  • 3:14 - 3:19
    week. Oh, that's gonna suck. So clarify.
  • 3:19 - 3:25
    Next, clarify. Ah. Again. So. Look, you know
    what
  • 3:25 - 3:27
    you're doing, now you gotta figure out why
    you're
  • 3:27 - 3:32
    doing it. Ask them. Hey, why do you need
  • 3:32 - 3:36
    to me to integrate email integration? Maybe
    they turn
  • 3:36 - 3:38
    around and they say, well, look, we've been
    getting
  • 3:38 - 3:41
    a lot of customers sending us screenshots
    and it'd
  • 3:41 - 3:43
    be nice to just be able to email those
  • 3:43 - 3:47
    into the system. Does a better, does a solution
  • 3:47 - 3:51
    already exist? If it does, you might be able
  • 3:51 - 3:54
    to point them towards that. And a bonus for
  • 3:54 - 3:57
    you, now you don't have to do anything.
  • 3:57 - 3:58
    Maybe they turn around and they say, yeah,
    I
  • 3:58 - 4:00
    know that that exists. But it's kind of a
  • 4:00 - 4:04
    pain to use. Well, now maybe you've found
    that
  • 4:04 - 4:07
    there's a better approach to solving their
    problem. Maybe
  • 4:07 - 4:10
    you just need to fix existing functionality.
    People come
  • 4:10 - 4:14
    to us, all the time, with prescriptions for
    solutions
  • 4:14 - 4:17
    to problems. It's really useful for us to
    take
  • 4:17 - 4:19
    a step back, and before we say, yeah, I'm
  • 4:19 - 4:22
    gonna do that, to say, wait, why do you
  • 4:22 - 4:24
    need me to do that? Maybe you can help
  • 4:24 - 4:27
    them come to a better solution. And, by doing
  • 4:27 - 4:29
    this, you're gonna get a better idea of what
  • 4:29 - 4:30
    you need to do.
  • 4:30 - 4:34
    All right. Once you know the what and you
  • 4:34 - 4:36
    know the why, it's time to start thinking
    about
  • 4:36 - 4:39
    estimating how hard it's gonna be. How long
    it's
  • 4:39 - 4:41
    gonna take you. I want you to think about
  • 4:41 - 4:43
    the major pieces of work that you're gonna
    need
  • 4:43 - 4:48
    to do. Imagine the project and, instead of
    thinking
  • 4:48 - 4:50
    about it in their terms, in terms of the
  • 4:50 - 4:52
    domain of the person asking you, think about
    it
  • 4:52 - 4:55
    in terms of what you have to do.
  • 4:55 - 4:57
    Is it gonna require a lot of database work?
  • 4:57 - 4:59
    Well, think about the tables. Is it gonna
    require
  • 4:59 - 5:01
    a lot of work in Rails? Think about your
  • 5:01 - 5:04
    models, your views, your controllers. Is it
    gonna require
  • 5:04 - 5:06
    a lot of front end work? Well, think about
  • 5:06 - 5:10
    the different components on the screen. Break
    these large
  • 5:10 - 5:14
    tasks down into smaller things, and write
    it down.
  • 5:14 - 5:15
    You're gonna need to refer back to this later
  • 5:15 - 5:18
    anyways. This is the stuff that you need to
  • 5:18 - 5:21
    do in order to, like, service their request.
  • 5:21 - 5:25
    Next, sometimes it could be overwhelming to
    get some
  • 5:25 - 5:28
    of these asks from people. You'll find that
    they
  • 5:28 - 5:31
    have so many, like, business rules that they
    want,
  • 5:31 - 5:34
    they've got so many little details that they
    want
  • 5:34 - 5:36
    to impart upon you. It can make it really
  • 5:36 - 5:38
    hard for you to see the forest for the
  • 5:38 - 5:41
    trees. Step back for a moment. Try and find
  • 5:41 - 5:45
    unifying principles in what they're asking
    for. Is there
  • 5:45 - 5:47
    some model that you can make, in your head,
  • 5:47 - 5:50
    that explains what they're looking for? It
    doesn't have
  • 5:50 - 5:52
    to be perfect. It's just gotta be enough so
  • 5:52 - 5:55
    that you understand what direction to be going
    in.
  • 5:55 - 5:58
    Again, write this stuff down. You'll need
    it later.
  • 5:58 - 6:02
    All right. You've broken stuff down. You've
    grouped stuff
  • 6:02 - 6:04
    back up. It's now in a stage where you
  • 6:04 - 6:07
    can sort of wrap your head around it. Think
  • 6:07 - 6:10
    about other things that you've done. Have
    you done
  • 6:10 - 6:13
    anything like this before? One of the unique
    things
  • 6:13 - 6:15
    about our profession is that we tend not to
  • 6:15 - 6:19
    do the same thing twice, and if we do,
  • 6:19 - 6:23
    we're kind of doing it wrong. So, if you
  • 6:23 - 6:26
    can, think about similar things. But maybe
    you haven't.
  • 6:26 - 6:28
    Turn and ask one of the other developers in
  • 6:28 - 6:32
    your company. Maybe they've worked on this
    code before.
  • 6:32 - 6:35
    Maybe they've dealt with this type of issue
    before.
  • 6:35 - 6:38
    They can help you get a better estimate.
  • 6:38 - 6:40
    And on top of that, if they're doing their
  • 6:40 - 6:43
    job right, maybe they'll ask you what it is
  • 6:43 - 6:45
    that you're trying to do, and they'll ask
    you
  • 6:45 - 6:48
    why. This is awesome, because it turns you
    around
  • 6:48 - 6:50
    and makes you be the person who is asking
  • 6:50 - 6:53
    you for work. It's really helpful for clarifying
    what
  • 6:53 - 6:55
    you've got to do.
  • 6:55 - 7:01
    Now, there are dozens of different methodologies.
    Different approaches.
  • 7:01 - 7:06
    Different sciences of estimation. Here's what
    I want you
  • 7:06 - 7:11
    to do. Make a guess. That's it. I know.
  • 7:11 - 7:13
    You could play planning poker. You could do
    all
  • 7:13 - 7:16
    number of things. But, just make a guess.
    Here.
  • 7:16 - 7:19
    I'm gonna make it flash. There. Isn't that
    awesome?
  • 7:19 - 7:22
    Seriously. Look, an estimate's just an informed
    guess. A
  • 7:22 - 7:25
    lot of times, we put way too much value
  • 7:25 - 7:27
    on an estimate. It's OK for you to be
  • 7:27 - 7:29
    wrong and it's OK for you to be uncertain.
  • 7:29 - 7:34
    In fact, if you're not uncertain, you're probably
    wrong.
  • 7:34 - 7:38
    I want you to quantify that uncertainty. Embrace
    it.
  • 7:38 - 7:40
    Are there things that you're being asked to
    do
  • 7:40 - 7:43
    that you don't know how they're gonna spa-
    like,
  • 7:43 - 7:46
    turn out? Maybe, like, you've got to load
    a
  • 7:46 - 7:48
    whole of data into the database and you're
    not
  • 7:48 - 7:50
    sure if it's gonna handle that. Maybe you've
    got
  • 7:50 - 7:53
    to make some, like, flippy clicky thing that's
    gonna
  • 7:53 - 7:56
    be, like, really hard to implement in Internet
    Explorer
  • 7:56 - 7:59
    8. Do you know how that's gonna work? Maybe
  • 7:59 - 8:01
    it will. Maybe it won't.
  • 8:01 - 8:04
    Raise these things up. Let other people know.
    If
  • 8:04 - 8:06
    they're asking you to do this work, say, you
  • 8:06 - 8:08
    know, I'm not really sure about how this is
  • 8:08 - 8:12
    gonna impact our database. I'm not really
    sure whether
  • 8:12 - 8:14
    IE 8's gonna support this user interaction
    you're asking
  • 8:14 - 8:18
    for. This is helpful, because it gives the
    other
  • 8:18 - 8:21
    person a better understanding of what you
    need to
  • 8:21 - 8:22
    be doing.
  • 8:22 - 8:28
    Now, next, play a spread. Tell them a story.
  • 8:28 - 8:32
    If everything goes well, I think that this
    might
  • 8:32 - 8:35
    be done in a week. If I need to
  • 8:35 - 8:38
    denormalize my database, if I need to do something
  • 8:38 - 8:41
    really crazy to get this supported cross-browser,
    this could
  • 8:41 - 8:45
    take me four weeks. Look, it's a lot easier
  • 8:45 - 8:47
    for you to hit an estimate, a range, than
  • 8:47 - 8:49
    it is for you to give them one hard
  • 8:49 - 8:53
    number. So that's great for us. But it's also
  • 8:53 - 8:54
    good for the person asking you to do the
  • 8:54 - 8:57
    work. Because you're giving them a story about
    the
  • 8:57 - 9:00
    future. You're telling them useful information
    about how this
  • 9:00 - 9:05
    could play out. And if they've got that information,
  • 9:05 - 9:08
    they can start making better, better use of
    that.
  • 9:08 - 9:11
    They can plan better based on that. And it
  • 9:11 - 9:14
    starts a better dialogue between you.
  • 9:14 - 9:18
    But you're not done there. You've got to deal
  • 9:18 - 9:25
    with this uncertainty. Nobody likes to get
    bad news.
  • 9:25 - 9:28
    Nobody likes to find out that the project
    is
  • 9:28 - 9:31
    doomed. But you know when they like to hear
  • 9:31 - 9:33
    that? Never. OK. Do you know when they'll
    tolerate
  • 9:33 - 9:36
    it? They'll tolerate it right at the very
    beginning.
  • 9:36 - 9:39
    You know when they won't tolerate it? In the
  • 9:39 - 9:40
    eleventh hour.
  • 9:40 - 9:43
    Oh, man. Are you gonna be ever so happy
  • 9:43 - 9:46
    when your fellow developer says, hey, guys,
    I know
  • 9:46 - 9:49
    we're gonna ship, but I just checked the clicky
  • 9:49 - 9:53
    flippy thing in IE-8, and it doesn't work.
  • 9:53 - 9:56
    Wait, we're supposed to ship when?
  • 9:56 - 9:58
    Nobody wants to find out that the uncertainty
    got
  • 9:58 - 10:01
    left to the end. So do it first. It's
  • 10:01 - 10:05
    really hard to do this, but deal with uncertainty
  • 10:05 - 10:08
    up front. That way, when you find out that
  • 10:08 - 10:10
    something's going to take a long time, you
    can
  • 10:10 - 10:13
    communicate that back to people, and you guys
    can
  • 10:13 - 10:16
    adjust your plans to accommodate that.
  • 10:16 - 10:17
    I know. We always want to do the fun
  • 10:17 - 10:19
    things first. I want to like, jump in and
  • 10:19 - 10:22
    do the stuff that I know really well first,
  • 10:22 - 10:25
    because I feel like I'm making progress. That's
    a
  • 10:25 - 10:29
    great way to set yourself up for failure later.
  • 10:29 - 10:33
    Now, doing that alone isn't enough.
  • 10:33 - 10:39
    You remember that estimate? Change it. Change
    it continuously.
  • 10:39 - 10:41
    As you learn new things, as you figure out
  • 10:41 - 10:44
    the uncertain things, and as you make progress,
    circle
  • 10:44 - 10:48
    back and tell anybody who depends on you how
  • 10:48 - 10:51
    long this is gonna take. Give them your vision
  • 10:51 - 10:54
    of the future. Give them your mental model
    of
  • 10:54 - 10:57
    what the risks are. Give them the understanding
    that
  • 10:57 - 10:59
    you have, right now, about what you think
    is
  • 10:59 - 11:02
    gonna happen.
  • 11:02 - 11:04
    Communicate often.
  • 11:04 - 11:08
    All right. Let's talk about the Dark Arts
    of
  • 11:08 - 11:12
    project management, for a moment. Look, you
    know what
  • 11:12 - 11:13
    you're doing. You know why you're doing it.
    You've
  • 11:13 - 11:18
    got an estimate and now. Oh. Shoot.
  • 11:18 - 11:23
    We can get screwed, as developers. We think
    that
  • 11:23 - 11:29
    we're all logical. That we're sane. Now. This
    ever
  • 11:29 - 11:31
    happen to you? It happens to me all the
  • 11:31 - 11:32
    time. Somebody comes up to me and they say,
  • 11:32 - 11:34
    hey, Adam, how long's it gonna take? And I
  • 11:34 - 11:36
    say, it's gonna take about three weeks. And
    they
  • 11:36 - 11:38
    say, look, we need this done really quickly.
    Could
  • 11:38 - 11:40
    you maybe do it in one? And I say.
  • 11:40 - 11:43
    Well. Oh. How about two weeks?
  • 11:43 - 11:45
    I thought that I was just being nice. I
  • 11:45 - 11:47
    thought that I was just splitting the difference,
    right.
  • 11:47 - 11:48
    Wrong. I just screwed myself.
  • 11:48 - 11:52
    It's natural for people to haggle. But you
    don't
  • 11:52 - 11:56
    win when people are estima- or bargaining
    over estimates.
  • 11:56 - 11:59
    Look, you're estimate is your best understanding
    of what
  • 11:59 - 12:02
    the future holds. What made it go from three
  • 12:02 - 12:05
    weeks to two weeks? How did you suddenly manage
  • 12:05 - 12:09
    to shave off a whole week of work in
  • 12:09 - 12:11
    five seconds? Cause I want to know. I need
  • 12:11 - 12:13
    to be able to do that later, so you
  • 12:13 - 12:14
    come up and you tell me.
  • 12:14 - 12:17
    No, look, you can't negotiate time. But you
    can
  • 12:17 - 12:22
    negotiate features. And as you learn more
    about the
  • 12:22 - 12:26
    project, you can re-estimate. Moral of this
    story, don't
  • 12:26 - 12:28
    give people estimates that you think are gonna
    make
  • 12:28 - 12:31
    them happy. Give them estimates that you think
    are
  • 12:31 - 12:32
    true.
  • 12:32 - 12:34
    If they keep badgering you about it, point
    it
  • 12:34 - 12:38
    out. Say, hey, look, I know what you're doing
  • 12:38 - 12:42
    here. I see what you're doing. Estimation
    bargaining. It's
  • 12:42 - 12:44
    not gonna work. Not only is it not gonna
  • 12:44 - 12:47
    work for me, it's not gonna work for you.
  • 12:47 - 12:50
    If you give into this kind of thing, you're
  • 12:50 - 12:54
    actually setting up not just yourself for
    trouble but
  • 12:54 - 12:57
    your team. The people who rely on you. And,
  • 12:57 - 12:58
    whether or not the person asking you to do
  • 12:58 - 13:00
    the work knows it, you're setting them up
    for
  • 13:00 - 13:03
    failure as well. Because they depend on that
    estimate
  • 13:03 - 13:05
    that you just gave them.
  • 13:05 - 13:08
    So, you know what you're doing. You know why
  • 13:08 - 13:10
    you're doing it. You've got an estimate. You
    defended
  • 13:10 - 13:13
    it. Maybe you shouldn't do it at all. There
  • 13:13 - 13:18
    are hidden costs involved in everything. Like
    complexity costs.
  • 13:18 - 13:22
    Look, some features that we build incur future,
    incur
  • 13:22 - 13:25
    costs on all the future work that we do.
  • 13:25 - 13:28
    For instance, if you build a new RESTful API,
  • 13:28 - 13:31
    great idea. If you build a new, like, axis
  • 13:31 - 13:34
    controls, you're just dropping in can-can.
    If you build,
  • 13:34 - 13:40
    like, a new mo- native mobile client. Yeah.
    You're
  • 13:40 - 13:44
    not done there. From now on, every new feature
  • 13:44 - 13:47
    that you implement has to take those old features
  • 13:47 - 13:50
    into account. So what you just did is you
  • 13:50 - 13:53
    made it so that your future work, future work,
  • 13:53 - 13:56
    is gonna hate past you.
  • 13:56 - 14:00
    You're just incurring new costs for the future.
    So
  • 14:00 - 14:03
    watch out for these cost-cutting concerns.
    they can really
  • 14:03 - 14:05
    bite us sometimes.
  • 14:05 - 14:08
    Now, there are ways to do this that are
  • 14:08 - 14:10
    gonna cut down on those costs. You can never
  • 14:10 - 14:13
    get rid of them entirely. But, if you want
  • 14:13 - 14:16
    to, do the extra engineering up front, factor
    that
  • 14:16 - 14:19
    into your original estimate. Let the people
    know that
  • 14:19 - 14:23
    you're gonna need a little bit more time.
  • 14:23 - 14:26
    What about operational costs? Look, are you
    introducing new
  • 14:26 - 14:28
    moving parts? You're gonna build a new job
    queue.
  • 14:28 - 14:30
    You're gonna throw resq and redis in place.
    They're
  • 14:30 - 14:33
    awesome tech. But guess what? They're costly.
  • 14:33 - 14:36
    How are you gonna test this in production
    server?
  • 14:36 - 14:38
    How are you gonna monitor it? How are you
  • 14:38 - 14:40
    gonna deploy this? How are you gonna make
    sure
  • 14:40 - 14:43
    that it's running every time you spin up a
  • 14:43 - 14:45
    new server?
  • 14:45 - 14:49
    It's not necessarily hard. But it does take
    time.
  • 14:49 - 14:52
    And once you've done it, it still takes time.
  • 14:52 - 14:56
    And you know what? When resq goes down, who
  • 14:56 - 14:59
    are they gonna call? They're gonna call you.
    You're
  • 14:59 - 15:02
    the one that put it in place, right. So
  • 15:02 - 15:04
    dealing with that is gonna take more time
    out
  • 15:04 - 15:07
    of what you consider to be your budget for
  • 15:07 - 15:10
    developing.
  • 15:10 - 15:14
    Support costs. These are awesome. There are
    a lot
  • 15:14 - 15:16
    of things that we can do as developers that
  • 15:16 - 15:18
    are just really easy. We can knock out a
  • 15:18 - 15:23
    feature in like ten minutes. The downside?
    Nobody understands
  • 15:23 - 15:25
    how that feature works.
  • 15:25 - 15:29
    So what if your users don't get it? Like,
  • 15:29 - 15:31
    you built this awesome thing, and they've
    got no
  • 15:31 - 15:32
    clue what it does. Who are they gonna talk
  • 15:32 - 15:35
    to? Well, if you've got one, they're gonna
    talk
  • 15:35 - 15:37
    to your support team. I hope your support
    team
  • 15:37 - 15:40
    understands - your support team doesn't understand
    it. OK.
  • 15:40 - 15:44
    Awesome. Your support team's now talking to
    you.
  • 15:44 - 15:47
    And that takes time that you're gonna be not
  • 15:47 - 15:50
    able to develop in. What if your business,
    as
  • 15:50 - 15:57
    a whole, doesn't get it? Meetings. That's
    what. And
  • 15:57 - 15:58
    you know what meetings mean? It's not just
    your
  • 15:58 - 16:02
    time that's being used up then, it's the entire
  • 16:02 - 16:04
    company. Everyone around that table? You're
    sinking more and
  • 16:04 - 16:07
    more costs into this.
  • 16:07 - 16:10
    So, again, you can combat some of this, but
  • 16:10 - 16:13
    go back, update those estimates, to factor
    this in.
  • 16:13 - 16:19
    What about opportunity costs? Slightly different
    thing. But think
  • 16:19 - 16:21
    about this. You can really only do one thing
  • 16:21 - 16:25
    at a time. So what's the highest priority
    thing
  • 16:25 - 16:27
    for you to be doing right now? What's the
  • 16:27 - 16:29
    highest priority thing for your team? For
    your business
  • 16:29 - 16:33
    as a whole? Because, whatever you're doing
    now is
  • 16:33 - 16:35
    excluding every other feature that you could
    be working
  • 16:35 - 16:40
    on right now.
  • 16:40 - 16:43
    Think about it. Prioritize all the things
    that you
  • 16:43 - 16:45
    would like to be doing. All the things that
  • 16:45 - 16:47
    you know you should be doing. Make sure that
  • 16:47 - 16:51
    this is actually the most important thing.
    Not just
  • 16:51 - 16:54
    the most immediate thing that you need to
    deal
  • 16:54 - 16:55
    with.
  • 16:55 - 16:58
    Look, I'm not saying don't do anything, but
    weigh
  • 16:58 - 17:03
    the costs. Understand them. Recognize them.
    Everything that we
  • 17:03 - 17:07
    do as developers costs us down the road. Choose
  • 17:07 - 17:09
    which ones you're willing to pay.
  • 17:09 - 17:14
    All right. More Dark Arts, cause I love these.
  • 17:14 - 17:17
    This one's the most insidious. This one trips
    us
  • 17:17 - 17:21
    up as developers, because we've got egos,
    and it's
  • 17:21 - 17:26
    really easy to manipulate us. This happen
    to you?
  • 17:26 - 17:27
    Somebody comes up to you, they say, hey, how
  • 17:27 - 17:28
    long's it gonna take? And you say, I don't
  • 17:28 - 17:31
    know, about a week? And they say, really?
    Oh,
  • 17:31 - 17:35
    and they look so disappointed. And then they
    say,
  • 17:35 - 17:38
    I thought you were smarter than that.
  • 17:38 - 17:43
    Wow. That hurts. Then, it's like, kicking
    you when
  • 17:43 - 17:46
    you're down. They say, oh, I'll go ask her.
  • 17:46 - 17:49
    I'll go ask the intern. She seems pretty smart.
  • 17:49 - 17:52
    Ah. Even worse. You know what happens next?
    I
  • 17:52 - 17:55
    don't know about you. But me? I start begging
  • 17:55 - 17:57
    to do the work. I'm like, you know what?
  • 17:57 - 17:59
    Did I say a week? I meant maybe, like,
  • 17:59 - 18:00
    three days.
  • 18:00 - 18:03
    Whoa, stop going towards the intern. One day?
    I'll
  • 18:03 - 18:06
    have it to you by noon.
  • 18:06 - 18:08
    Fuck.
  • 18:08 - 18:13
    Aw. Don't let your ego get you into trouble.
  • 18:13 - 18:16
    Stand by those estimates. Really, the best
    thing that
  • 18:16 - 18:18
    we can be as developers, in this case, is
  • 18:18 - 18:22
    have a little humility. And if you see somebody
  • 18:22 - 18:25
    trying to do this to you, call their bluff.
  • 18:25 - 18:27
    Like, they're not really gonna go to the intern.
  • 18:27 - 18:29
    Well, they might. And it might be a learning
  • 18:29 - 18:31
    experience for everyone.
  • 18:31 - 18:35
    But name this. Say, I know what you're doing
  • 18:35 - 18:38
    there. It's not gonna work on me. Stand up
  • 18:38 - 18:42
    for yourself. And if you can't, find a new
  • 18:42 - 18:43
    job.
  • 18:43 - 18:47
    All right. Deadlines. Like, I've got one coming
    up
  • 18:47 - 18:53
    in eleven minutes.
  • 18:53 - 18:57
    Deadlines come in all forms. They come in
    a
  • 18:57 - 19:01
    spectrum. From soft deadlines to hard deadlines.
    Soft deadlines
  • 19:01 - 19:03
    are things like goals. They're things we would
    like
  • 19:03 - 19:06
    to achieve. For instance, we would like to
    ship
  • 19:06 - 19:08
    this by the end of the week. We would
  • 19:08 - 19:11
    like to get this out by, I don't know,
  • 19:11 - 19:14
    this next conference. Hey, we're gonna try
    to get
  • 19:14 - 19:18
    this out for the customer by Q1.
  • 19:18 - 19:23
    Hard deadlines are things like, RailsConf.
    For me, anyways.
  • 19:23 - 19:28
    Can you imagine, RubyCentral sending out an
    email. They
  • 19:28 - 19:31
    say, hey guys, funny story. Adam didn't do
    his
  • 19:31 - 19:37
    slides, so we're postponing RubyConf by, like,
    a week.
  • 19:37 - 19:39
    Just change your reservations.
  • 19:39 - 19:41
    Yeah. I'm not DHH, so I can't get away
  • 19:41 - 19:42
    with that.
  • 19:42 - 19:48
    It's a hard deadline. So when hard deadlines
    come
  • 19:48 - 19:51
    up. Actually, when all deadlines come up,
    what do
  • 19:51 - 19:54
    we do? You gotta deal with it. Ignoring it's
  • 19:54 - 19:59
    not gonna work, and panicking also doesn't
    work. So,
  • 19:59 - 20:01
    we've really got four options. The first two
    are
  • 20:01 - 20:04
    ones that we as developers think that we really
  • 20:04 - 20:06
    like, and the second two are ones that managers
  • 20:06 - 20:09
    think that they really like. Nobody really
    likes any
  • 20:09 - 20:12
    of these options, when you get down to it.
  • 20:12 - 20:16
    But, if it's a soft deadline, if it's just
  • 20:16 - 20:21
    a goal, you guys can ship late. You can
  • 20:21 - 20:24
    miss. Maybe. It's probably not the end of
    the
  • 20:24 - 20:28
    world. Don't do this all the time, cause you're
  • 20:28 - 20:32
    gonna look like an idiot. But recognize. Weigh
    the
  • 20:32 - 20:38
    balance, weigh the thingies that you've gotta
    weigh. I
  • 20:38 - 20:39
    don't know.
  • 20:39 - 20:43
    Yeah. This talk is about work. Not about how
  • 20:43 - 20:45
    to give a good talk.
  • 20:45 - 20:51
    Rad. So, yeah. Sometimes you can ship late.
    Of
  • 20:51 - 20:54
    course, there are hard deadlines, right. There
    are things
  • 20:54 - 20:58
    like RubyConf. And I can't miss this deadline.
    If
  • 20:58 - 21:01
    I did, we would all be standing here and
  • 21:01 - 21:04
    I would be stammering like I was. So what
  • 21:04 - 21:05
    else can we do?
  • 21:05 - 21:08
    Well, we can cut scope. We can cut features.
  • 21:08 - 21:14
    Like, honestly, prioritize the things that
    you've gotta do.
  • 21:14 - 21:16
    Figure out what you can get done by the
  • 21:16 - 21:19
    deadline. Cut the rest.
  • 21:19 - 21:23
    For instance, I illustrated like all of these
    slides,
  • 21:23 - 21:26
    except for, I got about here and I ran
  • 21:26 - 21:30
    out of time. So I cut my little illustration.
  • 21:30 - 21:37
    One of the things that is scary about this,
  • 21:37 - 21:41
    though, is that some of the things that get
  • 21:41 - 21:44
    cut are the things that we, as developers,
    think
  • 21:44 - 21:51
    are important. Performance. Testing. Correctness.
    All these things can
  • 21:56 - 21:58
    get cut if you're not careful. So if you
  • 21:58 - 22:02
    value that, make sure that it's put high in
  • 22:02 - 22:04
    your priority. Make sure that you guard that
    against
  • 22:04 - 22:06
    the deadline.
  • 22:06 - 22:11
    OK. Another option. If you're not gonna get
    it
  • 22:11 - 22:13
    done and you can't ship later and you can't
  • 22:13 - 22:17
    cut features, well you can add more people,
    right?
  • 22:17 - 22:19
    Well, you could go read the Mythical Man Month,
  • 22:19 - 22:23
    but basically boils down to this. Unless you've
    got
  • 22:23 - 22:29
    a project where everybody can work completely
    independently, you're
  • 22:29 - 22:33
    gonna have to start talking to each other.
    Eh.
  • 22:33 - 22:36
    It's kind of uncomfortable.
  • 22:36 - 22:40
    So, I'm about to miss my deadline. They pull
  • 22:40 - 22:42
    you in to work with me. Now you and
  • 22:42 - 22:44
    I have to start talking. We've gotta make
    sure
  • 22:44 - 22:47
    that we aren't gonna be stepping on each other's
  • 22:47 - 22:49
    toes. We've got to keep each other appraised
    of
  • 22:49 - 22:52
    the situation. We've gotta understand which
    direction we're both
  • 22:52 - 22:54
    going in.
  • 22:54 - 22:57
    That adds overhead. And if you're splitting
    up work
  • 22:57 - 23:00
    between two people, it means that you're gonna
    start,
  • 23:00 - 23:02
    like, depending on the other person to get
    things
  • 23:02 - 23:05
    done. And if I'm waiting on you and I'm
  • 23:05 - 23:08
    twiddling my thumbs, that's sort of wasted
    time. That's
  • 23:08 - 23:11
    time that's not actually going towards getting
    the work
  • 23:11 - 23:12
    out.
  • 23:12 - 23:17
    So, adding more people sometimes works. But
    sometimes, it's
  • 23:17 - 23:20
    just gonna make everything go more slowly.
  • 23:20 - 23:24
    Oh, and if you do add more people, make
  • 23:24 - 23:28
    sure they get along. Cause nothing is more
    awkward
  • 23:28 - 23:32
    than running up against a deadline, working
    with somebody
  • 23:32 - 23:34
    who you want to punch. Like, this is how
  • 23:34 - 23:37
    sparks fly, right? You don't want to do this.
  • 23:37 - 23:39
    All right.
  • 23:39 - 23:43
    The final way that you can deal with a
  • 23:43 - 23:45
    deadline. If you can't two people to do the
  • 23:45 - 23:48
    work twice as fast, maybe you can make one
  • 23:48 - 23:53
    person work twice as hard. Ah. This really
    sucks.
  • 23:53 - 23:55
    And I'll tell you why.
  • 23:55 - 24:01
    It works. It can. Honestly. But it's not sustainable.
  • 24:01 - 24:04
    And I don't think any of us enjoy it.
  • 24:04 - 24:06
    Look, think about this. You've got eight hours
    to
  • 24:06 - 24:07
    work. You've got eight hours to sleep. And
    then
  • 24:07 - 24:09
    you've got eight hours for your daily commute,
    for
  • 24:09 - 24:12
    cleaning up after your dog, for cooking dinner,
    for
  • 24:12 - 24:14
    spending time with your friends, your family,
    for reading
  • 24:14 - 24:21
    seventeenth century poetry.
  • 24:21 - 24:24
    Where's that overtime gonna come out of? I
    gotta
  • 24:24 - 24:28
    hint for you. It's not coming out of work.
  • 24:28 - 24:35
    Bummer. OK, your only two remaining options
    are sleep
  • 24:35 - 24:38
    and what I would like to call life. So,
  • 24:38 - 24:41
    if that time's coming out of sleep, you're
    gonna
  • 24:41 - 24:47
    be tired. You're not gonna be very proficient.
    You're
  • 24:47 - 24:49
    not gonna be thinking straight.
  • 24:49 - 24:53
    We make the stupidest mistakes when we're
    up at
  • 24:53 - 24:59
    3 AM pounding on our keyboards. So quality
    takes
  • 24:59 - 25:05
    a hit. Shoot. Well, OK. What about life?
  • 25:05 - 25:07
    Use up a little bit of life to get
  • 25:07 - 25:11
    this out the door. This, this is the path
  • 25:11 - 25:17
    to burn out. To depression. Use it very sparingly.
  • 25:17 - 25:20
    Use it wisely. Think to yourself, is this
    more
  • 25:20 - 25:24
    important than cleaning up after my dog? Is
    this
  • 25:24 - 25:29
    more important than spending time with my
    kids? Depends
  • 25:29 - 25:35
    on how much you like your kids, right.
  • 25:35 - 25:37
    Just be careful. That's all I can say.
  • 25:37 - 25:39
    All right. Let's talk about one more of the
  • 25:39 - 25:45
    Dark Arts. Deadline hardening. This is the
    magical thing.
  • 25:45 - 25:47
    Whoops. I don't want to show this to you
  • 25:47 - 25:50
    yet. I gotta tell you about it first. Because,
  • 25:50 - 25:52
    here's what I love about this one. It happens
  • 25:52 - 25:55
    to us all the time, and every time it
  • 25:55 - 25:58
    does, we're like, totally surprised that it
    happened. We're
  • 25:58 - 26:02
    like where? Where did that come from? And
    I'm
  • 26:02 - 26:05
    like, what? Didn't this happen to you last
    week?
  • 26:05 - 26:08
    Or yesterday? All right.
  • 26:08 - 26:10
    Here's roughly how it goes.
  • 26:10 - 26:12
    Somebody comes up to you and they're like,
    hey,
  • 26:12 - 26:13
    let's try to release by the end of the
  • 26:13 - 26:16
    month. And you're like, um, I don't think
    we
  • 26:16 - 26:19
    can actually do that. But I'll try.
  • 26:19 - 26:21
    OK, and you go back to your keyboard really
  • 26:21 - 26:27
    quick, right. You know. Clock spins. Pages
    fly off
  • 26:27 - 26:31
    the calendar. Eighties work montage. All of
    a sudden,
  • 26:31 - 26:33
    manager comes back and they're like, hey,
    we need
  • 26:33 - 26:36
    to release by the end of the month. And
  • 26:36 - 26:39
    you're like, wait, what? Why? Why do we need
  • 26:39 - 26:41
    to release by the end of the month? And
  • 26:41 - 26:43
    they're like, we've got customers waiting
    on it now.
  • 26:43 - 26:46
    It's like, what? Why, why did you promise
    that
  • 26:46 - 26:49
    to them? And I'll tell you why. They heard
  • 26:49 - 26:52
    you say that you were going to try to
  • 26:52 - 26:54
    do it by the end of the month. Now,
  • 26:54 - 26:56
    I know that what you said, in your head,
  • 26:56 - 26:59
    was hey. Get out of here. I know that
  • 26:59 - 27:01
    what you said was, leave me alone, I gotta
  • 27:01 - 27:04
    code. I know that what you said was, I
  • 27:04 - 27:08
    don't see you.
  • 27:08 - 27:12
    But what they heard is, I'm on it.
  • 27:12 - 27:13
    It's a bit of wishful thinking on their part,
  • 27:13 - 27:17
    but it's true. Look, don't commit to making
    any
  • 27:17 - 27:21
    deadlines that you don't think that you can
    meet.
  • 27:21 - 27:24
    And saying that you'll try is committing.
  • 27:24 - 27:27
    Look, people are less likely to turn a goal,
  • 27:27 - 27:31
    a soft deadline, into a promise, a hard deadline,
  • 27:31 - 27:33
    if they think it's risky. When do they think
  • 27:33 - 27:36
    it's risky? They think it's risky when they
    know
  • 27:36 - 27:39
    that there's uncertainty. They know it's risky
    when they
  • 27:39 - 27:40
    know that the amount of work that you've got
  • 27:40 - 27:45
    to do is large. And that you're likely to
  • 27:45 - 27:47
    go over the deadline.
  • 27:47 - 27:51
    So, communicate your status and risk often.
  • 27:51 - 27:53
    Communicate uncertainty.
  • 27:53 - 27:57
    If you take nothing else away from this, communicate.
  • 27:57 - 28:00
    Make sure that other people understand what
    your view
  • 28:00 - 28:03
    of the world is right now. Because if you
  • 28:03 - 28:08
    don't, that's how you're gonna end up with
    unreasonable
  • 28:08 - 28:11
    estimates and. The other thing in my title.
    I
  • 28:11 - 28:14
    can't remember it. Awesome.
  • 28:14 - 28:18
    That's my talk. You guys have any questions?
    Wait.
  • 28:18 - 28:18
    Clap first.
Title:
RailsConf 2014 - Unreasonable Estimates and Improbable Goals by Adam Sanderson
Description:

more » « less
Duration:
28:44

English subtitles

Revisions