Most people think software development is like traveling to a certain destination by train:
You set a goal, pack your bags, board the train, and the only variable between you and your goal is the speed of the train. Unless the whole thing derails, you end up where you were planning on going.
Unfortunately software development is more like hitchhiking:
You set some general goals (somewhere sunny), pack your bags and after that where you end up depends on a whole lot of variables: who...