Software engineers are great at devising solutions for problems they introduce. Versioning promises to alleviate the pain of incompatibility. But incompatibility isn't some force of nature. It's a design choice. Changes don't have to break things. Functions can be added, options extended, modules namespaced. Versions are often an excuse to break software, rather than a promise of something better.
Tools are a trap. What good are notes you never refer to? What good are todo lists you don’t do? You shouldn’t solve one problem by creating another.
Without constraints it’s too easy to get lost – to take too long, or build too much. Time boxing, requirements, and serving somebody instead of everybody force us to be decisive and do the best with what we have.
It's good to know which direction you're going, but be careful of sacrificing today to focus on tomorrow – it's the work you do today that matters.