Put customer development before writing code.
Release early and often. The phrase, “If you aren’t embarrassed, you waited too long to release,” was very helpful to me. My first release was the tiniest sliver of what I imagined, but it gave me market validation (even if Erik and Saff were the only two people to buy it) and, more importantly, energy. The rapid release cycle let me experiment with features that I hoped would drive sales (none did) and fix blocking defects.
Ship it and fix it. The product needs to provide value from the first, but it doesn’t need to provide everyone with value all the time. Early sales answer questions about the market size. Early users accept some rough edges if they get to be first and you fix the problems. Not reflexively fixing every defect was a hard transition for me, but, often, answering the next business question was tmy highest priority. I would recommend installing real-time remote error reporting for anyone bringing client software to market. It was nerve-wracking at first to see all the errors, but in the end the feedback was invaluable.
Startups have to be product companies, in the sense of making a single thing that everyone uses.
Launch something fast, listen to users, and then iterate; that startups required resilience because they were always an emotional rollercoaster; and that most VCs were sheep.
Watch people who have money to spend, see what they’re wasting their time on, cook up a solution, and try selling it to them. It’s surprising how small a problem can be and still provide a profitable market for a solution.