Left! No!… Right! Wait a second till I get my bearings.
Seems familiar? We are all faced with indecision problems from time to time, it happens. Usually we know the goal in a fuzzy way (getting from A to B), we just happen to be spatially challenged (quote from Pratchett : Lords and Ladies). However, for the driver it can be a nuisance, and a source of frustration.
Well, this metaphor sticks when applied to software engineering. You kind of know what you want to do, generally “a super application that does XXXX”. The thing is, in software you have virtually (pun intended, har har har) every option available as to the how. Language, API, design,… Everything has to be decided and implemented, but there is no well-known path down this road.
This is the developer’s work, and it usually feels great. You are the Master of the Keys. You know the little cogwheels and springs, and most of the time, no one else will stick his nose in your code. You are the Indiana Jones of programming, set out to find a rare and hidden gem, with half a map and a whip. The how doesn’t really matter.
And sometimes, the things are foggier. The customer doesn’t even know what he wants, gives you hazy answers, generally on the first question, ignoring all the following ones. Sometimes, you might get something like “could you do it red?” instead of a font, placement, contents, and general style.
When you are indy, you learn to deal with that, by doing whatever you feel like doing, and then showing for feedback. It is the opposite approach to programming than the one I teach in class. Plan first, build last. But to most customers, the computer is a jungle, full of weird creatures, untamed. You have to extract something from it, and go back in if needed. Build first, build last, then.
It is somewhat strenuous, and you feel like you’re doing your job alone behind enemy lines, but as long as there is no malice from the customer, it is a good way to improve your skills, and explore a few new ways of doing things. With any luck, you’ll find the right thing on the first few attempts.
From time to time, it comes as a relief to have someone that knows exactly what he wants in front of you, but most of the time it can be the opposite pain : you don’t have a choice for the “how” either. You end up working mindlessly and following orders.
Which way do I like best? Sidetracking from one to the other!