Coding, Fast and Slow: Developers and the Psychology of Overconfidence

Coding, Fast and Slow: Developers and the Psychology of Overconfidence

This is an excellent take on why (we the) developers suck at time estimations.   Basically, it boils down to two reasons: unknown details of the project and overconfendence.

First off, there are, I believe, really two reasons why we’re so bad at making estimates. The first is the sort of irreducible one: writing software involves figuring out something in such incredibly precise detail that you can tell a computer how to do it. And the problem is that, hidden in the parts you don’t fully understand when you start, there are often these problems that will explode and just utterly screw you.

And this is genuinely irreducible. If you do “fully understand” something, you’ve got a library or existing piece of software that does that thing, and you’re not writing anything. Otherwise, there is uncertainty, and it will often blow up. And those blow ups can take anywhere from one day to one year to beyond the heat death of the universe to resolve.

Read the whole thing, it’s worth it.

GRUNT – The JavaScript Task Runner

GRUNT – The JavaScript Task Runner

Why use a task runner?
In one word: automation. The less work you have to do when performing repetitive tasks like minification, compilation, unit testing, linting, etc, the easier your job becomes. After you’ve configured it, a task runner can do most of that mundane work for you—and your team—with basically zero effort.

Why use Grunt?
The Grunt ecosystem is huge and it’s growing every day. With literally hundreds of plugins to choose from, you can use Grunt to automate just about anything with a minimum of effort. If someone hasn’t already built what you need, authoring and publishing your own Grunt plugin to npm is a breeze.

From 15 hours to 15 seconds: reducing a crushing build time

From 15 hours to 15 seconds: reducing a crushing build time

In summary:

  • Bad Practice #1: We favoured integration tests over unit tests.
  • Bad Practice #2: We had many, many features that were relatively unimportant.
  • Bad Practice #3: Our integration tests were actually acceptance tests.
  • Bonus tip: run the build entirely on the tmpfs in-memory file system.