If you’re embarking on a big project involving a lot of different changes, see if you can split up the changes into smaller, independently testable milestones. Don’t fall into the trap where you make five changes, get a bad result, and now have to figure out which change(s) were responsible.
Once you’ve figured out the particular solution you want to execute towards, frame it in terms of a hypothesis — what are you assuming will happen if you build this? (e.g. “The problem we want to solve is ensuring that every city resident knows what local events are going on every weekend. Our hypotheses is that we can reach X% of residents through an e-mail digest.”)
– Increasing responsibility on companies to convince talented people WHY they should pick this company / this opportunity over others. Companies that get good at this will amass huge talent reserves and field incredible teams. Companies that don’t will see all their best people leave and have their very survival threatened.
“It is impossible to construct machinery occupying unlimited space; but it is possible to construct finite machinery, and to use it through unlimited time. It is this substitution of the infinity of time for the infinity of space which I have made use of, to limit the size of the engine and yet to retain its unlimited power.”
My thinking on this is influenced a lot by Steve Yegge’s “The Nonesuch Beast” essay. Design and UX problems can be just as intractable as big-O algorithmic problems. A good WYSIWYG editor of arbitrary HTML is just as impossible as the halting problem is impossible.