ALTERNATE UNIVERSE DEV

CodingBlocks

The Pragmatic Programmer – How to Estimate

Joe is distracted by all of the announcements from E3, Allen is on the run from the Feebs, and Michael counts debugging as coding. All this and more as we continue discussing The Pragmatic Programmer.

So there you are using your podcast player to read these notes. But what happens when you get to your computer? Head over to https://www.codingblocks.net/episode109 to find this episode’s full show notes and join in on the conversation.

Sponsors

  • Discover.bot – a digital space for bot developers and enthusiasts of all skill levels to learn from one another, share stories, and move the bot conversation forward. Want to learn more about building bots? Get started with their Guide to Bot Building Frameworks.
  • Datadog.com/codingblocks – Sign up today for a free 14 day trial and get a free Datadog t-shirt after creating your first dashboard.
  • Clubhouse – The first project management platform for software development that brings everyone on every team together to build better products. Sign up for two free months of Clubhouse by visiting clubhouse.io/codingblocks.

Survey Says …

Anonymous Vote
Sign in with Wordpress
How much data do you use per month for your home ISP?
  • Less than 250GB.
  • Less than 500GB.
  • Less than 1TB.
  • No idea, unlimited plan bro.
  • You'd have to ask my neighbor.

News

  • Thank you, thank you, thank you for taking the time to leave us a review:
    • iTunes: binarycode86, Lio W, rbleattler, xXJesusXFreakXx, techno-logic
    • Stitcher: plogen, dirty_matlab, Grandpappy, plogen12, DamiaoDias
  • Be sure to see Allen speaking at the Atlanta Intelligent Devices meetup on June 24th where he’ll be giving his talk Moving from Batches to Real Time with Apache Kafka. (Meetup)

The Other DSL and Estimating

Domain Specific Languages

  • Computer languages influence how you think about a problem,
    • Designing a solution in F# will be different than C# and will be different from Go.
Tip

Program closer to the problem domain

Estimating

  • The process of estimating forces you to know more about your programs.
  • It makes you understand which pieces need optimizing and which pieces can be left alone.
Tip

Estimate to avoid surprises

When is Your Estimate Accurate Enough?

  • Know the context. Does the estimate need high accuracy or a ballpark figure?
  • Units are important. The more accurate the unit, the more accurate the recipient of the estimate will assume it to be.
    • 90 days will likely mean 90 days in the mind of the recipient.
    • 3 months will likely mean, somewhere around 3-4 months
      • The authors recommend to estimate in days for up to 15 days, in weeks for up to 8 weeks, in months for up to 30 weeks, and anything over that … question if you should really be estimating?
  • Understand what’s being asked to be estimated. You must understand the scope of the domain.
  • Your answer can include assumptions like “Assuming we keep our db tables the way they are, this feature will take __ days”.
  • Build a bare bones mental model. Doing so can reveal things that wouldn’t have been immediately apparent.
    • This can also expose new answers to the original question as well as alternatives in what can be done in a given amount of time with some trade-offs.
    • Building the model identifies inaccuracies in the estimation.
    • Further refining the model can improve the estimation. However, going too far may not improve it much as eventually there is a point of diminishing returns.
  • Break the model into components.
    • Identify the parameters of these components.
    • Identify the parameters that have the most impact on your module.
    • Start evaluating your model by plugging in values to these parameters, and this will help you answer the estimate question.
      • If you see strange results, that might indicate you’ve made a mistake in identifying your impactful parameters. This can be valuable information.
  • Track your estimates and your sub-estimates as well.
    • Evaluate how close you were to your estimations.
      • If you miss your estimates, find out why. It’ll help future estimates.

Estimating Project Schedules

  • Estimating large development projects is difficult.
  • The best way to get good estimates is to iterate on the same project and see how it progresses.
    • Check requirements.
    • Analyze risk.
    • Design, Implement, Integrate.
    • Validate with the users
  • Having to nail down a perfect estimation at the beginning, before doing any iteration is a mistake.
    • Why? Because it’d be a guess.
  • As you finish an iteration, you can use that to refine your project estimates, and you continue to do this and gain confidence in the estimates over time.
Tip

Iterate the Schedule with the Code

  • Most companies or management want estimates up front.
  • Help management understand that iterating on the project schedule is in their best interest.
  • What’s the best answer to give when asked for an estimate? “I’ll get back to you”
    • Estimates that were not thought out will typically come back to haunt you.

Resources We Like

  • The Pragmatic Programmer by Andrew Hunt, David Thomas (Amazon)
  • The Pragmatic Bookshelf (pragprog.com)

Tip of the Week

  • Trust us when we tell you to open your favorite command shell that can execute curl. Then execute this command: curl parrot.live.
  • Use OctoLinker to automatically add links for include, require, or import statements as you browse GitHub projects. (Chrome Web Store)
  • Manage your pull requests within Visual Studio using the Pull Requests for Visual Studio extension. (Visual Studio Marketplace, devblogs.microsoft.com)
  • Split your Cmder windows into 4 separate command shells (GitHub)
  • Use CTRL + ; to search for files and methods within Visual Studio. Note that if you add _any_ uppercase letter, Visual Studio will assume that the entire string is a case sensitive search. Otherwise, if all text is lowercase, it will perform a case insensitive search.
  • Use CTRL + SHIFT + T to navigate to a specific file by name within Visual Studio.

Episode source