A classic. I’ve listened to it a few times, but never taken notes. I wanted to write down what stood out this time around.
Note to self: everything he covers about “the waking mind” is great, i.e. the idea of giving your mind problems to solve in the background.
On waterfall and design:
Most of the biggest problems in software are problems of misconception.
We don't have a good idea of what we're doing before we do it and then GO! GO! GO!
Testing and type systems are of limited use here.
There was lots of stuff that was terrible about waterfall. But it doesn’t mean the step before “go build it” isn’t a good step. Design is still important.
Also: type systems won’t let you know if you have a good idea.
On features vs. solving problems:
We should be solving problems, not building features. A feature is just an attribute of something. It’s the shiny chrome knob. It’s not the purpose of the car. There's no guarantee if you put together a feature list, even if it comes from the customer, that it’s gonna solve their own problem. Or that it will solve any problem. Or that the features, when you put them together, don’t introduce a bunch of other problems.
Avoiding problems != solving problems:
We have a tendency, because we're all smart and we love being smart and figuring out how to make things go, that [we think] figuring out how to make something go is good no matter what it took to do it. If we can figure out how to get around a problem, [we consider it a success]…Avoiding problems is not solving problems.
Be discerning when you look at possibilities and what others do. There are tradeoffs in everything:
Usually when [people talk] about tradeoffs in their software, they’re talking about the parts of their software that suck. “Oh well, I had to make these tradeoffs...”
It’s really easy to get excited about the good parts of what you do. But you should be looking for tradeoffs. The chances of there being no tradeoffs in what you do are slim.
I think that’s [so exciting]: no matter what I’ve ever thought of, I know I’m gonna think of something better…means that I'm still going. You will [always] think of better ideas.
If I can advocate anything: do not be afraid of being wrong.