When I first started driving, I remember keeping a lot of my focus on the road right in front of me, like right in front of me, maybe 20 feet ahead of the car. I was doing my best to watch out for pot holes and debris and whatever else, nervously and frequently checking the speedometer (a habit I'd quickly drop and regain years later after a few speeding tickets, lol), but at the cost of seeing other vehicles (and pedestrians!) further ahead. It didn't occur to me that by the time I saw anything, I'd have to swerve like a madman to avoid them.
It took awhile, and a few reminders from the drivers ed instructor, to stop doing that. I must not have been the only one, because several of us were in the car when she told all of us we needed to look further down the road. If there's any obstacles to avoid, we'll still see them, and more importantly we'll see them with enough time to actually do something about them.
Isn't that true of so many things? It's tough to plan for retirement when you're 60, or a vacation 3 days before you were planning to leave, or a school assignment the night before it's due.. not that I ever did that like every time. We (usually) try to look ahead, the further the better, because once we identify the obstacles in front of us we can begin to deal with them.
I started programming in 2008, and during most of that time I was just concerned with the task in front of my nose, largely unconcerned with next week or month. It's not that there weren't things to anticipate or avoid, but that it was someone else's job to avoid them. It's been a year since I began acting as a (dev) team lead for various projects at work, and the experience has been a good one. One of the most important lessons I keep learning is to look ahead.
The first project I took lead on went fairly smoothly. It forced me to work with people outside my immediate team to find a working solution, even with people at a separate company with whom we were integrating. Overall it was fairly low pressure, and while I did look ahead, most obstacles were handled as they arose and some I didn't anticipate.
The next project was bonkers, tied to a corporate initiative with a strict deadline, using multiple technologies I wasn't very familiar with, and losing a key member of the team, which took awhile (for everyone) to bounce back from. It's tough to avoid obstacles when they're moving fast and already in motion before you even start, but we made it through. I wouldn't wish that on anyone though.
We're deep into another project, and I've had to force myself to stop development at times (you know.. the fun part), to think about what we're going to need next, and who needs to be involved now to get us ready for later. It's not always up to me to initiate all those conversations, but at the very least to bring them up as concerns and help prioritize them.
Luckily I'm part of a talented and enthusiastic team, and our part of the overall organization is pretty self-contained, so finding the right person to help and then getting help hasn't been much of an issue. The flipside of that is that I try to make myself available to help too, when other people outside the development team have questions, because I'm not the only one with projects and obstacles to avoid!
What about you? Are you in a position where you have to plan ahead? How do you do it.. what works and what doesn't?