What Happens When You Type a URL and Press Enter
DNS lookups, TCP and TLS handshakes, HTTP requests, servers, and the browser's rendering pipeline. The whole journey of a web page, explained so it finally clicks.
Read →Estimates go wrong for predictable reasons: hidden work, unknowns and optimism. How to break work down, estimate in ranges, account for risk and communicate estimates so they're actually useful.
"How long will it take?" might be the hardest question in software. Developers are famously bad at estimating, not because they lack skill, but because software work hides a lot of its effort until you're in the middle of it. You can't make estimates perfect. You can make them honest and useful.
Large tasks are impossible to estimate well. Break them into pieces small enough that each takes no more than a day or two:
"User accounts" becomes:
Breaking work down often reveals forgotten tasks, which is half the value.
A single number pretends to a certainty you don't have. Give a range instead:
"Two to four days."
For each task, think in three numbers:
The width of the range communicates uncertainty. A narrow range means you've done this before; a wide range means there are unknowns, and that's valuable information for whoever's planning.
If something is genuinely uncertain, like an integration with an unfamiliar third-party API, don't guess. Propose a spike: a short, time-boxed investigation (say, half a day) to answer the open questions. Then estimate properly.
Explicitly include:
A common rule of thumb is that these "extras" add a significant share on top of the pure coding time.
Write down your estimates and compare them with how long things actually took. After a few projects, you'll know your personal multiplier. If your estimates are consistently 40% low, adjust future ones accordingly. This is the single most effective way to get better.
Fixed-price work puts all the estimation risk on you. Protect yourself:
(Freelancing and finding clients.)
Many teams estimate in relative units like story points rather than hours, comparing tasks to each other ("this is about twice as big as that"). It can reduce false precision and works well for planning over time. Whatever method you use, the same principles apply: small pieces, honest uncertainty, and learning from actuals.
Break it into small tasks, estimate each as a range, explicitly include testing, review and deployment, separate unknowns with time-boxed spikes, and calibrate using how long past work actually took.
Hidden work, unknowns, optimism, interruptions and changing requirements. Estimates improve with smaller tasks, ranges instead of single numbers and tracking actual time.
A range. It communicates uncertainty honestly and helps others plan for risk, while a single number implies false precision.
DNS lookups, TCP and TLS handshakes, HTTP requests, servers, and the browser's rendering pipeline. The whole journey of a web page, explained so it finally clicks.
Read →There are dozens of HTTP status codes, but about fifteen cover nearly everything. What each one means, when to return it, and the mix-ups (401 vs 403, 301 vs 302) that confuse everyone.
Read →A, AAAA, CNAME, MX, TXT and NS records in plain English, why DNS changes seem slow, and the troubleshooting commands that tell you what is really going on.
Read →