One of the many reasons that I am drawn to software development is that the cost-to-profit and risk-to-reward ratio is so high. It costs nothing to learn how to program. A single program that solves one problem well can produce billions of dollars of value.

Unlike many other forms of creative output, there is no inherent cost of materials or consumables. You can never run out of paint, or need to run to the store to buy more nails, or have to start over because a particular piece of wood was cut to the wrong length, or left out in the rain, or gone rotten.

Now, this feature does come with increased difficulty of feeling progress or estimating when a project will be complete. When building a bridge across a river, it is relatively easy to have a clear image in mind of what the final product will look like, and it is easy to tell if you are 25% or 50% done. You can also be reasonably sure that the final 25% of the project will not take more time or materials than the first 75% of the project. The intangibility of software makes these assumptions difficult if not impossible. One can spend years building software and still not have any idea of when the project will be “complete” or what “complete” would even look like.

But when you are intent on building a simple tool to do one thing well, it is amazing how quickly a complete product can be imagined, built, distributed, and put to use.