"Several distinct problems manifest themselves as delays in launching: working too slowly; not truly understanding the problem; fear of having to deal with users; fear of being judged; working on too many different things; excessive perfectionism. Fortunately you can combat all of them by the simple expedient of forcing yourself to launch something fairly quickly." —Paul Graham
Excessive perfectionism was a big one for me. It is insidious because important matters like software architecture and testing frameworks are really just forms of bike-shedding until the software is shipped. I took the advice to heart and sometimes wrote code that was smelly but got the job done. Guess what, my product is launched and when I smooth out the rough edges nobody even knows the difference.
Sharing a post written by my colleague about how to break down larger projects into incrementally shippable pieces.
Having worked with her on many larger scale projects: she's pretty great at this, and the advice does especially well to motivate splitting over trying to do things all at once.
I've found this strategy to be invaluable, which is no surprise given some of the larger year+ projects I've worked on. It's better for everyone–business and individuals alike!–to find a cadence of regular progress.
Excessive perfectionism was a big one for me. It is insidious because important matters like software architecture and testing frameworks are really just forms of bike-shedding until the software is shipped. I took the advice to heart and sometimes wrote code that was smelly but got the job done. Guess what, my product is launched and when I smooth out the rough edges nobody even knows the difference.