Look at my terrible standing table. Since I really didn't want to go to IKEA for a simple standing table (IKEA is like the anti-old-skool store), I decided to make my own. This is an advantage of renting a free-standing house rather than an apartment: you can buy tools and use them. I went to home depot and bought wood, a circular saw, an orbital sander, and some screws. I set out about the task.
Worst table ever. I had a free standing table, but it was kind of wobbly. I could see the joints were not tight. So, I walk away for a week (since I had to go bed and a week of going to work).
To finish it up, I got a belt sander so I could try to even out the legs. Ok, it still sucks. This is not a product that I would want to buy. I see the details, and they matter. The joint work is terrible.
I considered to start over to get the framing and joints perfect. However, I thought about it, and I came to this conclusion: finish. Just finish. So, I got some black stain and I applied after I sanded it down. I put in some braces, and it's a lot less wobbly now. Once I apply the Polyurethane, it will be shiny and nice. Oh, and I got some feet which I can adjust to the floor.
Suppose I went with my perfectionist gut feeling, I wouldn't have messed up on the staining nor have overcome other obstacles. If I had started over, then messing up the staining would have been devasting. Instead, I can plan now for version 2.0; and there will be a 2.0 table. I'm going to make a table for the printer. Then, I'm going to make a table for the dining room.
This idea rings true for software development as well. I've done a lot of different things over the years. I've written mountains of code, and I've repeated myself more times than I care to admit. I feel like I should have finished more projects, but I was enamored with the idea of creating something perfect; alas, now I have nothing to show for years of hard work (besides a great job).