Code is cheap!

When I started to program I used to be nervous about everything. I always wanted to make sure my environment was set up in the best possible configuration, or I was reading the best programming books available or that when I wrote code, it was at its very best so I would never need to re-write it again.

As time passed I realized that no matter how long I planned or prepared, the code I wrote was never perfect. Yes, if I prepared well, the code I wrote was better than when I just jumped in, but it was never perfect.

Software is never finished only abandoned

The cyclical nature of software ensures that when you write a software solution, over time the solution needs to be changed because more complicated things have been built on the solution and it needs to support these new features. For example when Facebook first started, it was only profile pages. You had to go to each friend's page to see what had changed on it. For a better user experience, Facebook created the News Feed so the underlining code for how profile changes were tracked had to be re-written no matter how well it was written before. Another scenario is that the problem the software solution solves keeps changing. For example look at the JQuery library, a very famous javascript library, popular for turning reusable lines of javascript into one line functions. The library has to be maintained actively because browsers keep changing, javascript keeps expanding and developers come up with new things they need so no matter how perfect the first version was written, it all has to be re-done over and over again...till the day it is abandoned.

If your code is not working for you, pivot

Pivoting is when you change the direction of your company or software solution to test out a hypothesis based on metrics you have been collecting. No industry encourages pivoting or have the privilege to pivot like the software industry. Many of the biggest companies in the industry have all changed direction and the reason they can do this is because it is easy to delete and edit code. It is not as easy for a restaurant to turn into a hotel or an oil company to become a clothing retailer. No industry has the ability to change its skin like a software company. This is why Facebook has pushed the "Move fast and break things" mentality. Creating great software is driven by results of experiments. Experimentation is for the privileged.

Conclusion

Considering code is never finished and you can easily change it, do not fret about the perfection of what you are about to build. Focusing on an actually working solution is more important than getting everything perfect the first time. Code is cheap, it is easy to delete, change and supplement as a developer, so never be afraid to do so. The faster you move and complete experiments, the faster you will get to the best solution.