This post comes from the experience of several brutal multi-year engineering projects at Google that, in retrospect, I wonder "why didn't anyone criticize the idiotic decisions that I was making?!".<p>Along the way, I was making "good software engineering" decisions but very poor product decisions: specifically, the biggest risk to the project wasn't that the code was poor but rather that no one would want the thing that I had set out to build. I find that unless you're diligent about incremental validation, time on engineering projects is usually wasted on the scale of years by creating a beautiful castle that no one wants to live in.<p>I now see that my project was a lot more like a little startup: by finding resources about how to make a startup go, I could have saved a lot of trouble. By taking this path, you still end up with a lot of waste (rewriting fast, poor versions of features to be better), but you're able to course correct earlier and have a lot better chance at the overall project being a success.