Today, all the schools are out, and it is a good old “ice day” in Austin, TX. For northerners, know that Austin doesn’t really have many plows or equipment to speak of to combat this because it happens only every two years.
If you are from a northern state, or have driving in Colorado to go skiing, you might have experience driving in icy conditions. No car _really_ does well driving on ice, but the point is not to drive on ice. The point is to _not_ drive on the ice. And if you have never done it before, you have no idea what to expect. Without the past experience, you don’t know how to be prepared for the encounter, what to avoid, or how to handle it – and when to completely avoid it altogether.
Coding on ice
The same is true every day when engineering software. Because this is such a new profession, we have a short supply of experienced software engineers who have been through the tough challenges before. Because of the growth in the industry, companies are forced to hire developers who have executed a few projects but lack the experience in the wide range of situation that can occur in a software engineering project, or the many years of production operations in the life of a software system.
Without the prior experience of being in a certain situation before, developers don’t know what to expect, and have to figure out on-the-fly how to handle a new situation.
I don’t pretend to have experienced everything that is possible in the software world. Few people could, and I continually turn to Fred Brooks (teaching link) for his timeless wisdom in this area.
One particularly hairy situation can be integration with other systems that were built before widespread networks were common. These systems are very difficult to deal with, and if one has started one’s career with websites and easy-to-use web services, these can catch one by surprise.
This is just a short post to reflect on the similarities drawn from something as simple as driving on ice and creating software in an unfamiliar situation. Without past experience to draw from, we can get turned around, or find ourselves off the road.
Drawing from others’ experience is a good move. Reading the works of others in an area, educating ourselves, etc. And the best option is to find something who has been through the challenge before so that you don’t have to go through the jungle yourself. There is no shame is asking for help and admitting that you’ve never dealt with a problem quite like this before. It’s liberating to be able to say “I don’t know”, or “I haven’t done anything like this before”. There is no software engineer in the world who had seen everything. And the more I learn, the more I discover just how much I have yet to learn.