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 …
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
- Using a domain language allows for common communication amongst members of various teams in an understandable way.
- This sounds like the ubiquitous language discussed in the book Domain Driven Design – Tackling Complexity in the Heart of Software by Eric Evans (Amazon).
- Listen to our discussion of that book in the following episodes:
- 58. Why Domain Driven Design
- 60. Software Architecture – The Domain in Domain Driven Design
- 61. Software Architecture – Aggregate Roots, Factories, and Repositories
- 62. Software Architecture – Strategic Design and Domain Events
- 63. Software Architecture – Explicit Constraints, Processes, Specification Pattern and more
- 64. Software Architecture – What is Supple Design?
- Listen to our discussion of that book in the following episodes:
- This sounds like the ubiquitous language discussed in the book Domain Driven Design – Tackling Complexity in the Heart of Software by Eric Evans (Amazon).
- Write code in the vocabulary of the application domain.
- This language doesn’t need to be executable.
- By focusing on the higher level abstraction, you can concentrate on the domain problems and ignore the implementation details.
- Writing in a mini-language:
- This could be using a tool that interacts with existing applications as if you were a user on the system.
- This could be in the form of meta programming.
- Create metadata that you then use to dynamically generate the required API’s and UI’s.
- This can simplify maintenance on an application as all your code is generated for you.
- Create metadata that you then use to dynamically generate the required API’s and UI’s.
- This comes at a cost though because it can make it harder to extend and possibly even maintain over time by using these mini-languages.
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.
- Evaluate how close you were to your estimations.
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
, orimport
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.